--- a/camerauis/cameraxui/camerax.pri Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/camerax.pri Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 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"
@@ -14,28 +14,7 @@
# Description:
#
-
-# Auto-detect path for S60 Qt Mobile extensions
-exists(/qt/extensions/include) { INCLUDEPATH += /qt/extensions/include }
-exists(/qtextensions/include) { INCLUDEPATH += /qtextensions/include }
-exists(/s60/mw/qtextensions/include) { INCLUDEPATH += /s60/mw/qtextensions/include }
-exists(/sf/mw/qtextensions/include) { INCLUDEPATH += /sf/mw/qtextensions/include }
-exists(/ext/mw/qtextensions/include) { INCLUDEPATH += /ext/mw/qtextensions/include }
-exists(/epoc32/include/oem) { INCLUDEPATH += /epoc32/include/oem }
-exists(/epoc32/include/middleware) { INCLUDEPATH += /epoc32/include/middleware }
-exists(/epoc32/include/domain/middleware) { INCLUDEPATH += /epoc32/include/domain/middleware }
-exists(/epoc32/include/osextensions) { INCLUDEPATH += /epoc32/include/osextensions }
-exists(/epoc32/include/domain/osextensions) { INCLUDEPATH += /epoc32/include/domain/osextensions }
-exists(/epoc32/include/applications) { INCLUDEPATH += /epoc32/include/applications }
-exists(/epoc32/include/domain/applications) { INCLUDEPATH += /epoc32/include/domain/applications }
-exists(/epoc32/include/mw) { INCLUDEPATH += /epoc32/include/mw }
-exists(/epoc32/include/platform/mw) { INCLUDEPATH += /epoc32/include/platform/mw }
-exists(/epoc32/include/platform) { INCLUDEPATH += /epoc32/include/platform }
-exists(/epoc32/include/app) { INCLUDEPATH += /epoc32/include/app }
-exists(/epoc32/include/platform/app) { INCLUDEPATH += /epoc32/include/platform/app }
-exists(/epoc32/include/ecam) { INCLUDEPATH += /epoc32/include/ecam }
-exists(/epoc32/include/mw/QtTest) { INCLUDEPATH += /epoc32/include/mw/QtTest }
-
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
# FORCE_SECONDARY_CAMERA
# Configuration flag for forcing secondary camera hw to be used also for primary camera ui.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/bwins/cxengineu.def Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+ ?createEngine@CxeEngine@@SAPAV1@XZ @ 1 NONAME ; class CxeEngine * CxeEngine::createEngine(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/conf/CI_camerax.confml Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,44 @@
+<configuration xmlns="http://www.s60.com/xml/confml/1" name="camerax">
+ <feature ref="CxSettingsCrUid" name="CameraX Application Settings">
+ <desc>CameraX settings</desc>
+
+ <setting ref="StillShowCapturedCr" name="Show Captured Image" type="selection">
+ <desc>StillShowCapturedCr defines setting in Image settings.
+ If disabled, post-capture view is not shown after capturing an image.
+ </desc>
+ <option name="On" value="-1"/>
+ <option name="2 seconds" value="2000"/>
+ <option name="10 seconds" value="10000"/>
+ <option name="Off" value="0"/>
+ </setting>
+
+ <setting ref="VideoShowCapturedCr" name="Show Captured Video" type="selection">
+ <desc>VideoShowCapturedCr defines setting in Image settings.
+ If disabled, post-capture view is not shown after capturing an video.
+ </desc>
+ <option name="On" value="-1"/>
+ <option name="2 seconds" value="2000"/>
+ <option name="10 seconds" value="10000"/>
+ <option name="Off" value="0"/>
+ </setting>
+
+ <setting ref="GeoTaggingCr" name="Store GPS Location Information" type="selection">
+ <desc> Store location information in metadata for captured images.</desc>
+ <option name="Disabled" value="0"/>
+ <option name="Enabled" value="1"/>
+ </setting>
+
+ <setting ref="FacetrackingCr" name="Store facetracking state" type="selection">
+ <desc>The key defines if facetracking should be on or off.</desc>
+ <option name="Disabled" value="0"/>
+ <option name="Enabled" value="1"/>
+ </setting>
+
+ <setting ref="CaptureSoundAlwaysOnCr" name="Capture sound always on" type="selection">
+ <desc>The key defines if the capture sound should always be played, regardless of profile sounds.</desc>
+ <option name="Disabled" value="0"/>
+ <option name="Enabled" value="1"/>
+ </setting>
+
+ </feature>
+</configuration>
--- a/camerauis/cameraxui/cxengine/conf/camerax.confml Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/conf/camerax.confml Thu Jul 15 01:55:05 2010 +0300
@@ -27,26 +27,6 @@
</desc>
</setting>
- <setting ref="StillShowCapturedCr" name="Show Captured Image" type="selection">
- <desc>StillShowCapturedCr defines setting in Image settings.
- If disabled, post-capture view is not shown after capturing an image.
- </desc>
- <option name="On" value="-1"/>
- <option name="2 seconds" value="2000"/>
- <option name="10 seconds" value="10000"/>
- <option name="Off" value="0"/>
- </setting>
-
- <setting ref="VideoShowCapturedCr" name="Show Captured Video" type="selection">
- <desc>VideoShowCapturedCr defines setting in Image settings.
- If disabled, post-capture view is not shown after capturing an video.
- </desc>
- <option name="On" value="-1"/>
- <option name="2 seconds" value="2000"/>
- <option name="10 seconds" value="10000"/>
- <option name="Off" value="0"/>
- </setting>
-
<setting ref="ImageQualityCr" name="Image quality" type="int">
<desc>ImageQualityCr defines the quality currently in use in still mode.
</desc>
@@ -63,6 +43,29 @@
0 indicates "video recording with sound."
</desc>
</setting>
+
+ <setting ref="GeoTaggingDisclaimerCr" name="Geotagging first time use notification" type="int">
+ <desc>GeoTaggingDisclaimerCr defines whether we have to show first time use note for geotagging
+ when we first start the camera.
+ </desc>
+ </setting>
+
+ <setting ref="CameraModeCr" name="Camera mode" type="int">
+ <desc> Current mode of the camera - still or video.</desc>
+ </setting>
+ <setting ref="FlashModeStillCr" name="Video quality" type="int">
+ <desc>VideoQualityCr defines the quality currently in use in video mode.
+ </desc>
+ </setting>
+ <setting ref="SceneModeStillCr" name="Scene mode still" type="string">
+ <desc>Scene mode setting in still mode.
+ </desc>
+ </setting>
+ <setting ref="SceneModeVideoCr" name="Scene mode video" type="string">
+ <desc> Scene mode setting in video mode.
+ </desc>
+ </setting>
+
</feature>
<data>
@@ -76,7 +79,15 @@
<ImageQualityCr>1</ImageQualityCr>
<VideoQualityCr>0</VideoQualityCr>
<AudioMuteCr>0</AudioMuteCr>
- </CxSettingsCrUid>
+ <GeoTaggingCr>1</GeoTaggingCr>
+ <FacetrackingCr>1</FacetrackingCr>
+ <CaptureSoundAlwaysOnCr>0</CaptureSoundAlwaysOnCr>
+ <GeoTaggingDisclaimerCr>1</GeoTaggingDisclaimerCr>
+ <CameraModeCr>0</CameraModeCr>
+ <FlashModeStillCr>0</FlashModeStillCr>
+ <SceneModeStillCr>image_scene_auto</SceneModeStillCr>
+ <SceneModeVideoCr>video_scene_auto</SceneModeVideoCr>
+ </CxSettingsCrUid>
</data>
<rfs>
@@ -88,7 +99,15 @@
<StillShowCapturedCr>true</StillShowCapturedCr>
<VideoShowCapturedCr>true</VideoShowCapturedCr>
<AudioMuteCr>true</AudioMuteCr>
- </CxSettingsCrUid>
+ <GeoTaggingCr>true</GeoTaggingCr>
+ <FacetrackingCr>true</FacetrackingCr>
+ <CaptureSoundAlwaysOnCr>true</CaptureSoundAlwaysOnCr>
+ <GeoTaggingDisclaimerCr>true</GeoTaggingDisclaimerCr>
+ <CameraModeCr>true</CameraModeCr>
+ <FlashModeStillCr>true</FlashModeStillCr>
+ <SceneModeStillCr>true</SceneModeStillCr>
+ <SceneModeVideoCr>true</SceneModeVideoCr>
+ </CxSettingsCrUid>
</rfs>
</configuration>
Binary file camerauis/cameraxui/cxengine/conf/camerax_20027017.crml has changed
--- a/camerauis/cameraxui/cxengine/cxengine.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/cxengine.pro Thu Jul 15 01:55:05 2010 +0300
@@ -66,6 +66,7 @@
LIBS += -lxqserviceutil
LIBS += -loommonitor
LIBS += -lhal
+LIBS += -llocationmanager
symbian {
TARGET.EPOCALLOWDLLDATA = 1 // TODO: check this out??
@@ -91,6 +92,7 @@
symbian {
CXENGINE_DIR = $$section(PWD,":",1)
BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>"
+ BLD_INF_RULES.prj_exports += "$$CXENGINE_DIR/conf/CI_camerax.confml APP_LAYER_CONFML(CI_camerax.confml)
BLD_INF_RULES.prj_exports += "$$CXENGINE_DIR/conf/camerax.confml APP_LAYER_CONFML(camerax.confml)
BLD_INF_RULES.prj_exports += "$$CXENGINE_DIR/conf/camerax_20027017.crml APP_LAYER_CRML(camerax_20027017.crml)
BLD_INF_RULES.prj_exports += "$$CXENGINE_DIR/conf/cameraxvariation.confml APP_LAYER_CONFML(cameraxvariation.confml)
@@ -156,6 +158,10 @@
cxememorymonitorprivate.h \
cxediskmonitor.h \
cxediskmonitorprivate.h \
+ cxesnapshotcontrol.h \
+ cxesnapshotcontrolprivate.h \
+ cxegeotaggingtrail.h \
+ cxegeotaggingtrailprivate.h \
sensor/xqsensor.h \
sensor/xqaccsensor.h \
sensor/xqdeviceorientation.h \
@@ -202,6 +208,10 @@
cxememorymonitorprivate.cpp \
cxediskmonitor.cpp \
cxediskmonitorprivate.cpp \
+ cxesnapshotcontrol.cpp \
+ cxesnapshotcontrolprivate.cpp \
+ cxegeotaggingtrail.cpp \
+ cxegeotaggingtrailprivate.cpp \
sensor/xqsensor.cpp \
sensor/xqaccsensor.cpp \
sensor/xqdeviceorientation.cpp \
Binary file camerauis/cameraxui/cxengine/data/autoFocus.wav has changed
Binary file camerauis/cameraxui/cxengine/data/capture.wav has changed
Binary file camerauis/cameraxui/cxengine/data/videoStart.wav has changed
Binary file camerauis/cameraxui/cxengine/data/videoStop.wav has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/eabi/cxengineu.def Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+ _ZN9CxeEngine12createEngineEv @ 1 NONAME
+
--- a/camerauis/cameraxui/cxengine/inc/api/cxeautofocuscontrol.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/api/cxeautofocuscontrol.h Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -34,7 +34,7 @@
{
Q_OBJECT
public:
-
+
/*
* Autofocus control states.
*/
@@ -42,71 +42,76 @@
{
//! focusing
InProgress = 0x01,
-
+
//! Autofocus Failed
Failed = 0x02,
-
+
//! Focused
Ready = 0x04,
-
+
//! State after successfully canceling AF or during startup
Unknown = 0x08,
-
+
//! Starting to cancel any pending AF requests
Canceling = 0x10 // Starting to Cancel any pending AF requests
};
-
+
// TODO: Check if we have to get all the supported modes from adaptation.
enum Mode
{
//! AF mode: Auto
Auto,
-
+
//! AF mode: Hyperfocal
Hyperfocal,
-
+
//! AF mode: Macro
Macro,
-
+
//! AF mode: Infinity
Infinity,
-
+
//! AF mode: Portrait
Portrait
};
-
+
/**
* Starts Autofocus.
* \param soundEnabled indicates if the auto focus sound should be played
*/
virtual CxeError::Id start(bool soundEnabled = true) = 0;
-
+
/**
* Cancels Autofocus.
*/
virtual void cancel() = 0; // cancels active start operation
-
+
/**
* Setting Autofocus Mode.
*/
virtual void setMode( Mode newMode ) = 0; // sets default value for current view/mode
-
+
/**
* Get current Autofocus mode.
*/
virtual Mode mode() const = 0;
-
+
+ /**
+ * Is the mode a fixed focus mode.
+ */
+ virtual bool isFixedFocusMode(Mode mode) const = 0;
+
/**
* Get current Autofocus state.
*/
virtual State state() const = 0; // returns current AF state, one of AutoFocusState
-
+
/**
* Check if Autofocus is Supported or Not.
*/
virtual bool supported() const = 0; // true when AF is supported
-
+
/**
* Check if auto focus sound is enabled
*/
--- a/camerauis/cameraxui/cxengine/inc/api/cxeengine.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/api/cxeengine.h Thu Jul 15 01:55:05 2010 +0300
@@ -22,6 +22,7 @@
class CxeCameraDeviceControl;
class CxeViewfinderControl;
+class CxeSnapshotControl;
class CxeStillCaptureControl;
class CxeVideoCaptureControl;
class CxeAutoFocusControl;
@@ -30,6 +31,7 @@
class CxeFeatureManager;
class CxeSettings;
class CxeMemoryMonitor;
+class CxeGeoTaggingTrail;
/**
* CxeEngine provides the the entry point into CameraX engine. This is the
@@ -59,6 +61,11 @@
virtual CxeViewfinderControl &viewfinderControl() = 0;
/**
+ * Access the snapshot control.
+ */
+ virtual CxeSnapshotControl &snapshotControl() = 0;
+
+ /**
* Access the still capture control.
*/
virtual CxeStillCaptureControl &stillCaptureControl() = 0;
@@ -92,13 +99,23 @@
* Memory monitor utility.
*/
virtual CxeMemoryMonitor &memoryMonitor() = 0;
-
+
+ /**
+ * Geotagging trail utility.
+ */
+ virtual CxeGeoTaggingTrail &geoTaggingTrail() = 0;
+
/**
* Get current camera mode.
*/
virtual Cxe::CameraMode mode() const = 0;
/**
+ * Set current camera mode.
+ */
+ virtual void setMode(Cxe::CameraMode mode) = 0;
+
+ /**
* Initialize the camera in either still or video mode. This method is also
* used to switch between modes.
*/
--- a/camerauis/cameraxui/cxengine/inc/api/cxeerror.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/api/cxeerror.h Thu Jul 15 01:55:05 2010 +0300
@@ -64,7 +64,6 @@
//! any other general errors
General = 11
};
-
}
Q_DECLARE_METATYPE(CxeError::Id)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/inc/api/cxegeotaggingtrail.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,80 @@
+/*
+* 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:
+*
+*/
+
+#ifndef CXEGEOTAGGINGTRAIL_H
+#define CXEGEOTAGGINGTRAIL_H
+
+#include <QObject>
+#include <QMetaType>
+#include "cxeerror.h"
+
+class CxeSettings;
+class CxeStillCaptureControl;
+class CxeVideoCaptureControl;
+
+class CxeGeoTaggingTrailPrivate;
+
+class CxeGeoTaggingTrail : public QObject
+{
+ Q_OBJECT
+
+public:
+
+ //! Geotagging trail states
+ enum State {
+ //! location utility not connected
+ NotConnected = 0x01,
+
+ //! connected to location utility, but location trail NOT STARTED.
+ Connected = 0x02,
+
+ //! starting Location trail, GPS data not yet available
+ TrailStarted = 0x04,
+
+ //! location trail started and GPS data available.
+ DataAvailable = 0x08
+ };
+
+public:
+
+ CxeGeoTaggingTrail(CxeStillCaptureControl &stillControl,
+ CxeVideoCaptureControl &videoControl,
+ CxeSettings &settings);
+
+ ~CxeGeoTaggingTrail();
+
+signals:
+ void stateChanged(CxeGeoTaggingTrail::State newState, CxeError::Id error);
+
+public slots:
+ void start();
+ void stop();
+
+public:
+ State state();
+
+protected:
+ CxeGeoTaggingTrailPrivate *const d_ptr;
+
+private:
+ Q_DECLARE_PRIVATE(CxeGeoTaggingTrail)
+
+};
+
+Q_DECLARE_METATYPE(CxeGeoTaggingTrail::State)
+
+#endif // CXEGEOTAGGINGTRAIL_H
--- a/camerauis/cameraxui/cxengine/inc/api/cxenamespace.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/api/cxenamespace.h Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -41,7 +41,7 @@
enum CameraMode
{
//! Still image capture mode
- ImageMode,
+ ImageMode = 0,
//! Video recording mode
VideoMode
@@ -109,7 +109,8 @@
enum AspectRatio
{
AspectRatio4to3, // standard
- AspectRatio16to9 // wide screen
+ AspectRatio16to9, // wide screen
+ AspectRatio11to9
};
enum SettingKeyType
@@ -126,11 +127,45 @@
FreeMemoryTrigger = 0,
FreeMemoryTarget
};
+
+ /*!
+ * Indicates if Geotagging setting is enabled or disabled.
+ */
+ enum GeoTagging
+ {
+ GeoTaggingOff = 0,
+ GeoTaggingOn
+ };
+
+ /*!
+ * Indicates if Geotagging disclaimer note is shown to the users during camera first startup
+ */
+ enum GeoTaggingDisclaimer
+ {
+ GeoTaggingDisclaimerDisabled = 0,
+ GeoTaggingDisclaimerEnabled
+ };
+
+ // image scene mode key values
+ static const char* IMAGE_SCENE_AUTO = "image_scene_auto";
+ static const char* IMAGE_SCENE_PORTRAIT = "image_scene_portrait";
+ static const char* IMAGE_SCENE_SCENERY = "image_scene_scenery";
+ static const char* IMAGE_SCENE_MACRO = "image_scene_macro";
+ static const char* IMAGE_SCENE_SPORTS = "image_scene_sports";
+ static const char* IMAGE_SCENE_NIGHT = "image_scene_night";
+ static const char* IMAGE_SCENE_NIGHTPORTRAIT = "image_scene_night_portrait";
+
+ // video scene setting key values
+ static const char* VIDEO_SCENE_AUTO = "video_scene_auto";
+ static const char* VIDEO_SCENE_NIGHTPORTRAIT = "video_scene_night_portrait";
+ static const char* VIDEO_SCENE_LOWLIGHT = "video_scene_low_light";
+ static const char* VIDEO_SCENE_NIGHT = "video_scene_night";
}
namespace CxeSettingIds
{
// Setting Ids
+ static const char* CAMERA_MODE = "camera_mode";
static const char* FOCAL_RANGE = "focal_range";
static const char* FLASH_MODE = "flash_mode";
static const char* WHITE_BALANCE = "white_balance";
@@ -147,7 +182,10 @@
static const char* VIDEO_QUALITY = "videoQuality";
static const char* SECONDARY_CAMERA = "2ndCamera";
static const char* SELF_TIMER = "selfTimer";
-
+ static const char* FACE_TRACKING = "face_tracking";
+ static const char* GEOTAGGING = "geotagging";
+ static const char* GEOTAGGING_DISCLAIMER = "geotagging_disclaimer";
+ static const char* CAPTURE_SOUND_ALWAYS_ON = "capture_sound_always_on";
// file name/path related key values
static const char* FNAME_FOLDER_SUFFIX = "folder_suffix";
@@ -159,21 +197,6 @@
static const char* IMAGE_SCENE = "still_scene_modes";
static const char* VIDEO_SCENE = "video_scene_modes";
- // image scene mode key values
- static const char* IMAGE_SCENE_AUTO = "image_scene_auto";
- static const char* IMAGE_SCENE_PORTRAIT = "image_scene_portrait";
- static const char* IMAGE_SCENE_SCENERY = "image_scene_scenery";
- static const char* IMAGE_SCENE_MACRO = "image_scene_macro";
- static const char* IMAGE_SCENE_SPORTS = "image_scene_sports";
- static const char* IMAGE_SCENE_NIGHT = "image_scene_night";
- static const char* IMAGE_SCENE_NIGHTPORTRAIT = "image_scene_night_portrait";
-
- // video scene setting key values
- static const char* VIDEO_SCENE_AUTO = "video_scene_auto";
- static const char* VIDEO_SCENE_NIGHTPORTRAIT = "video_scene_night_portrait";
- static const char* VIDEO_SCENE_LOWLIGHT = "video_scene_low_light";
- static const char* VIDEO_SCENE_NIGHT = "video_scene_night";
-
// setting keys for post capture timeout
static const char* STILL_SHOWCAPTURED = "still_showcaptured";
static const char* VIDEO_SHOWCAPTURED = "video_showcaptured";
--- a/camerauis/cameraxui/cxengine/inc/api/cxestillcapturecontrol.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/api/cxestillcapturecontrol.h Thu Jul 15 01:55:05 2010 +0300
@@ -155,7 +155,7 @@
* @param snapshot The snapshot image.
* @param id Id of the image this snapshot is for.
*/
- void snapshotReady(CxeError::Id error, const QPixmap& snapshot, int id);
+ void snapshotReady(CxeError::Id error, const QImage &snapshot, int id);
void imageCaptured(CxeError::Id error, int id);
/**
--- a/camerauis/cameraxui/cxengine/inc/api/cxevideocapturecontrol.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/api/cxevideocapturecontrol.h Thu Jul 15 01:55:05 2010 +0300
@@ -90,9 +90,9 @@
virtual void deinit() = 0;
signals:
- void videoComposed(CxeError::Id error, const QString& filename);
+ void videoComposed(CxeError::Id error, const QString &filename);
void stateChanged(CxeVideoCaptureControl::State newState, CxeError::Id error);
- void snapshotReady(CxeError::Id error, const QPixmap& snapshot, const QString& filename);
+ void snapshotReady(CxeError::Id error, const QImage &snapshot, const QString &filename);
void remainingTimeChanged();
protected:
--- a/camerauis/cameraxui/cxengine/inc/api/cxutils.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/api/cxutils.h Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -25,28 +25,39 @@
#define QT_TRANSLATE_SYMBIAN_LEAVE_TO_EXCEPTION QT_TRAP_THROWING
#endif
-//! @todo change back when we can use udeb again
-//#ifdef _DEBUG
-#if 1
+
+// Traces enabled only in debug builds.
+// These can heavily affect the performance.
+#ifdef _DEBUG
#include <QDebug> // Qt Debug
+#ifdef Q_OS_SYMBIAN
#include <e32debug.h> // Symbian Debug
+#endif // Q_OS_SYMBIAN
- // engine specific debug macros
#define CX_DEBUG(msg) qDebug msg;
- #define CX_DEBUG_SYMBIAN(msg) RDebug::Print msg;
#define CX_DEBUG_ENTER_FUNCTION() qDebug("%s => ", __PRETTY_FUNCTION__);
#define CX_DEBUG_IN_FUNCTION() qDebug("%s =><= ", __PRETTY_FUNCTION__);
#define CX_DEBUG_EXIT_FUNCTION() qDebug("%s <= ", __PRETTY_FUNCTION__);
+#ifdef Q_OS_SYMBIAN
+ #define CX_DEBUG_SYMBIAN(msg) RDebug::Print msg;
#define CX_DEBUG_ASSERT(x) if( !(x) ) {\
qDebug("%s:%d, ASSERT FAIL [%s]", __FILE__, __LINE__, #x); \
ASSERT(x); \
}
+#else // !Q_OS_SYMBIAN
+ #define CX_DEBUG_SYMBIAN(msg) qDebug()<< msg;
+ #define CX_DEBUG_ASSERT(x) if( !(x) ) {\
+ qDebug("%s:%d, ASSERT FAIL [%s]", __FILE__, __LINE__, #x); \
+ Q_ASSERT(x); \
+ }
+ #define OstTrace0(x,y,z)
+
+#endif // Q_OS_SYMBIAN
#define CX_ASSERT_ALWAYS(x) CX_DEBUG_ASSERT(x)
#else // !_DEBUG
- // engine specific debug macros
#define CX_DEBUG(msg)
#define CX_DEBUG_SYMBIAN(msg)
#define CX_DEBUG_ENTER_FUNCTION()
@@ -57,6 +68,4 @@
#endif // _DEBUG
-
-
#endif // CXUTILS_H
--- a/camerauis/cameraxui/cxengine/inc/cxeautofocuscontrolsymbian.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxeautofocuscontrolsymbian.h Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -27,6 +27,7 @@
//forward declarations
class CxeCameraDevice;
+class CxeSettings;
@@ -41,13 +42,14 @@
Q_OBJECT
public:
- CxeAutoFocusControlSymbian( CxeCameraDevice &cameraDevice );
+ CxeAutoFocusControlSymbian( CxeCameraDevice &cameraDevice, CxeSettings &settings );
virtual ~CxeAutoFocusControlSymbian();
CxeError::Id start(bool soundEnabled = true);
void cancel();
void setMode( CxeAutoFocusControl::Mode newMode );
CxeAutoFocusControl::Mode mode() const;
+ bool isFixedFocusMode(CxeAutoFocusControl::Mode mode) const;
CxeAutoFocusControl::State state() const;
bool supported() const;
@@ -80,7 +82,8 @@
// Handle ECam events
void handleCameraEvent( int eventUid, int error );
- void handleSceneChanged(CxeScene& scene);
+ void handleSceneChanged(CxeScene &scene);
+ void handleSettingValueChanged(const QString &settingId, QVariant newValue);
private:
@@ -92,8 +95,11 @@
CCamera::CCameraAdvancedSettings *mAdvancedSettings; // not owned
CxeAutoFocusControl::Mode mAfMode;
CCamera::CCameraAdvancedSettings::TFocusRange mAFRange;
+ CxeSettings &mSettings;
bool mCancelled;
bool mSoundEnabled;
+ bool mFaceTrackingOverride; //need for temporary override of the AF mode if FT is enabled by user
+ CxeAutoFocusControl::Mode mPreviousAFMode; //for restoring previous AF mode in case of FT override
};
#endif // CXEAUTOFOCUSCONTROLSYMBIAN_H
--- a/camerauis/cameraxui/cxengine/inc/cxecenrepkeys.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxecenrepkeys.h Thu Jul 15 01:55:05 2010 +0300
@@ -28,6 +28,14 @@
const unsigned long int ImageQualityCr = 0x7;
const unsigned long int VideoQualityCr = 0x8;
const unsigned long int AudioMuteCr = 0x9;
+const unsigned long int GeoTaggingCr = 0xA;
+const unsigned long int FacetrackingCr = 0xB;
+const unsigned long int CaptureSoundAlwaysOnCr = 0xC;
+const unsigned long int GeoTaggingDisclaimerCr = 0xD;
+const unsigned long int CameraModeCr = 0xE;
+const unsigned long int FlashModeStillCr = 0xF;
+const unsigned long int SceneModeStillCr = 0x10;
+const unsigned long int SceneModeVideoCr = 0x11;
const unsigned long int CxRuntimeFeaturesCrUid = {0x20027018};
--- a/camerauis/cameraxui/cxengine/inc/cxediskmonitorprivate.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxediskmonitorprivate.h Thu Jul 15 01:55:05 2010 +0300
@@ -30,9 +30,6 @@
{
Q_OBJECT
- // Owner of this private implementation.
- friend class CxeDiskMonitor;
-
private:
explicit CxeDiskMonitorPrivate(CxeSettings &settings);
~CxeDiskMonitorPrivate();
@@ -60,6 +57,8 @@
#endif // Q_OS_SYMBIAN
qint64 mTriggerLevelBytes;
qint64 mLatestFreeBytes;
+
+ friend class CxeDiskMonitor;
};
--- a/camerauis/cameraxui/cxengine/inc/cxeenginesymbian.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxeenginesymbian.h Thu Jul 15 01:55:05 2010 +0300
@@ -24,6 +24,7 @@
class CxeCameraDevice;
class CxeCameraDeviceControl;
class CxeViewfinderControl;
+class CxeSnapshotControl;
class CxeStillCaptureControl;
class CxeVideoCaptureControl;
class CxeSettingsControlSymbian;
@@ -39,6 +40,7 @@
class CxeFileSaveThread;
class CxeDiskMonitor;
class CxeMemoryMonitor;
+class CxeGeoTaggingTrail;
class CxeEngineSymbian : public CxeEngine
@@ -50,6 +52,7 @@
CxeCameraDeviceControl &cameraDeviceControl();
CxeViewfinderControl &viewfinderControl();
+ CxeSnapshotControl &snapshotControl();
CxeStillCaptureControl &stillCaptureControl();
CxeVideoCaptureControl &videoCaptureControl();
CxeAutoFocusControl &autoFocusControl();
@@ -58,10 +61,14 @@
CxeSensorEventHandler &sensorEventHandler();
CxeFeatureManager &featureManager();
CxeMemoryMonitor &memoryMonitor();
+ CxeGeoTaggingTrail &geoTaggingTrail();
Cxe::CameraMode mode() const;
+ void setMode(Cxe::CameraMode mode);
void initMode(Cxe::CameraMode cameraMode);
bool isEngineReady();
+ void construct();
+
signals:
void reserveStarted();
@@ -69,7 +76,6 @@
virtual void createControls();
private slots:
- void construct();
void doInit();
private:
@@ -78,11 +84,14 @@
bool initNeeded();
bool startViewfinderNeeded();
void reserve();
+ void saveMode();
+ void startGeotaggingTrail();
protected:
CxeCameraDeviceControl *mCameraDeviceControl;
CxeCameraDevice *mCameraDevice; // not own
CxeViewfinderControl *mViewfinderControl;
+ CxeSnapshotControl *mSnapshotControl;
CxeStillCaptureControl *mStillCaptureControl;
CxeVideoCaptureControl *mVideoCaptureControl;
CxeSettingsControlSymbian *mSettingsControl;
@@ -97,6 +106,7 @@
CxeFileSaveThread *mFileSaveThread;
CxeDiskMonitor *mDiskMonitor;
CxeMemoryMonitor *mMemoryMonitor;
+ CxeGeoTaggingTrail *mGeoTaggingTrail;
};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/inc/cxeexception.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef CXEEXCEPTION_H
+#define CXEEXCEPTION_H
+
+#include <exception>
+
+/*!
+* Exception class for engine internal errors.
+* Contains one integer which can be used to carry error code,
+* in normal cases which is of type CxeError::Id.
+*/
+class CxeException : public std::exception
+{
+public:
+ /*!
+ * Constructor.
+ */
+ explicit CxeException(int error) : mError(error) {};
+
+ /*!
+ * Destructor.
+ */
+ virtual ~CxeException() throw() {};
+
+ /*!
+ * Get the error code causing this exception.
+ * @return The error code.
+ */
+ int error() const { return mError; };
+
+ /*!
+ * Helper method to throw exception if given status code is an error.
+ * Everything but zero is considered error.
+ * @param status The status code to check.
+ */
+ static void throwIfError(int status) { if (status) { throw new CxeException(status); } }
+
+private:
+ //! Error code for this exception.
+ int mError;
+};
+
+#endif // CXEEXCEPTION_H
--- a/camerauis/cameraxui/cxengine/inc/cxefilesavethread.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxefilesavethread.h Thu Jul 15 01:55:05 2010 +0300
@@ -40,8 +40,8 @@
public slots:
virtual void handleVideoSaved(CxeError::Id status, const QString& filename) = 0;
- virtual void handleSnapshotReady(CxeError::Id status, const QPixmap& snapshot, const QString& filename) = 0;
- virtual void handleSnapshotReady(CxeError::Id status, const QPixmap& snapshot, int id) = 0;
+ virtual void handleSnapshotReady(CxeError::Id status, const QImage& snapshot, const QString& filename) = 0;
+ virtual void handleSnapshotReady(CxeError::Id status, const QImage& snapshot, int id) = 0;
protected:
--- a/camerauis/cameraxui/cxengine/inc/cxefilesavethreadsymbian.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxefilesavethreadsymbian.h Thu Jul 15 01:55:05 2010 +0300
@@ -48,9 +48,8 @@
public slots:
void handleVideoSaved(CxeError::Id status, const QString& filename);
- void handleSnapshotReady(CxeError::Id status, const QPixmap& snapshot, const QString& filename);
- void handleSnapshotReady(CxeError::Id status, const QPixmap& snapshot, int id);
-
+ void handleSnapshotReady(CxeError::Id status, const QImage& snapshot, const QString& filename);
+ void handleSnapshotReady(CxeError::Id status, const QImage& snapshot, int id);
protected slots:
void handleFileHarvested(CxeError::Id status, const QString& filename);
@@ -67,7 +66,7 @@
void run();
void read();
void saveNow();
- void harvestFile(const QString& filename);
+ void harvestFile(const QString& filename, bool addLocation);
private: // data shared between the threads
@@ -78,7 +77,7 @@
QWaitCondition mDataToSave;
mutable QMutex mSnapshotsMutex;
- QHash<QString, QPixmap> mSnapshots;
+ QHash<QString, QImage> mSnapshots;
protected: // thread only used data
int mCount;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/inc/cxegeotaggingtrailprivate.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,86 @@
+/*
+* 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:
+*
+*/
+
+#ifndef CXEGEOTAGGINGTRAILPRIVATE_H
+#define CXEGEOTAGGINGTRAILPRIVATE_H
+
+#include <QTimer>
+#include <QObject>
+#include <QVariant>
+#include <QString>
+
+#include "cxeerror.h"
+#include "rlocationtrail.h"
+#include "cxestatemachine.h"
+#include "cxegeotaggingtrail.h"
+
+
+
+
+// Forward declarations
+class CxeSettings;
+class RLocationTrail;
+class CxeStillCaptureControl;
+class CxeVideoCaptureControl;
+
+
+
+
+class CxeGeoTaggingTrailPrivate : public QObject,
+ public CxeStateMachine
+{
+ Q_OBJECT
+
+private:
+
+ CxeGeoTaggingTrailPrivate(CxeStillCaptureControl &stillControl,
+ CxeVideoCaptureControl &videoControl,
+ CxeSettings &settings);
+ ~CxeGeoTaggingTrailPrivate();
+
+signals:
+ void stateChanged(CxeGeoTaggingTrail::State newState, CxeError::Id error);
+
+protected: // from CxeStateMachine
+ void handleStateChanged(int newStateId, CxeError::Id error);
+
+private slots:
+ void handleSettingValueChanged(const QString&,QVariant);
+ void handleGeoTaggingPropertyEvent(long int uid, unsigned long int key, QVariant value);
+ void timeout();
+ void stop(bool closeSession = false);
+
+private:
+ void start();
+ void initializeStates();
+ bool canStopTrail() const;
+ CxeGeoTaggingTrail::State state() const;
+
+private:
+ CxeStillCaptureControl &mStillCaptureControl;
+ CxeVideoCaptureControl &mVideoCaptureControl;
+ CxeSettings &mSettings;
+ QTimer mStopLocationTrailTimer;
+ bool mPendingStopTrailSession;
+#if defined(Q_OS_SYMBIAN)
+ RLocationTrail mLocationTrail;
+#endif
+
+ friend class CxeGeoTaggingTrail;
+};
+
+#endif // CXEGEOTAGGINGTRAILPRIVATE_H
--- a/camerauis/cameraxui/cxengine/inc/cxeimagedataitemsymbian.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxeimagedataitemsymbian.h Thu Jul 15 01:55:05 2010 +0300
@@ -30,12 +30,19 @@
{
Q_OBJECT
public: // from CxeImageDataItemSymbian
- CxeImageDataItemSymbian(QByteArray data, QString filename, int id, CxeImageDataItem::State state = CxeImageDataItem::SavePending);
+ CxeImageDataItemSymbian(QByteArray data,
+ QString filename,
+ int id,
+ bool addLocation,
+ CxeImageDataItem::State state = CxeImageDataItem::SavePending);
+
virtual ~CxeImageDataItemSymbian();
CxeImageDataItem::State state() const;
CxeError::Id save();
int id() const;
+ bool isLocationEnabled() const;
+
public: // new methods
QString path() const;
@@ -60,6 +67,7 @@
// used for image saving
QByteArray mData;
+ bool mAddLocationInfo;
QString mPath;
RFile mFile;
RFs mFs;
--- a/camerauis/cameraxui/cxengine/inc/cxeimagedataqueuesymbian.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxeimagedataqueuesymbian.h Thu Jul 15 01:55:05 2010 +0300
@@ -49,7 +49,7 @@
CxeImageDataItem &operator[]( int index );
public: // public member functions, not in client API
- CxeImageDataItemSymbian *startSave( QByteArray data, QString path, int id );
+ CxeImageDataItemSymbian *startSave( QByteArray data, QString path, int id, bool addLocation);
private: // private data members
QList<CxeImageDataItemSymbian*> mList;
--- a/camerauis/cameraxui/cxengine/inc/cxememorymonitorprivate.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxememorymonitorprivate.h Thu Jul 15 01:55:05 2010 +0300
@@ -31,9 +31,6 @@
{
Q_OBJECT
- // Owner of this private implementation.
- friend class CxeMemoryMonitor;
-
private:
explicit CxeMemoryMonitorPrivate(CxeFeatureManager &features);
~CxeMemoryMonitorPrivate();
@@ -55,6 +52,8 @@
#ifdef Q_OS_SYMBIAN
ROomMonitorSession mOomMonitor;
#endif // Q_OS_SYMBIAN
+
+ friend class CxeMemoryMonitor;
};
#endif // CXEMEMORYMONITORPRIVATE_H
--- a/camerauis/cameraxui/cxengine/inc/cxequalitypresets.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxequalitypresets.h Thu Jul 15 01:55:05 2010 +0300
@@ -23,8 +23,8 @@
/**!
* Interface Class for CxeQualityPresetsSymbian
-* Queries supported image and video qualities from ICM and creates the related
-* data and wraps up the quality settings for the client.
+* Queries supported image and video qualities from ICM and creates the related
+* data and wraps up the quality settings for the client.
*/
class CxeQualityPresets
{
@@ -32,7 +32,7 @@
virtual ~CxeQualityPresets() {};
virtual QList<CxeImageDetails> imageQualityPresets(Cxe::CameraIndex cameraId) = 0;
virtual QList<CxeVideoDetails> videoQualityPresets(Cxe::CameraIndex cameraId) = 0;
- virtual qreal avgVideoBitRateScaler() = 0;
+ virtual int recordingTimeAvailable(const CxeVideoDetails& details, qint64 space) = 0;
};
#endif // CXEQUALITYPRESETS_H
--- a/camerauis/cameraxui/cxengine/inc/cxequalitypresetssymbian.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxequalitypresetssymbian.h Thu Jul 15 01:55:05 2010 +0300
@@ -37,9 +37,10 @@
~CxeQualityPresetsSymbian();
QList<CxeImageDetails> imageQualityPresets(Cxe::CameraIndex cameraId);
QList<CxeVideoDetails> videoQualityPresets(Cxe::CameraIndex cameraId);
- qreal avgVideoBitRateScaler();
+ int recordingTimeAvailable(const CxeVideoDetails& details, qint64 space);
private:
+ qreal avgVideoBitRateScaler();
Cxe::AspectRatio calculateAspectRatio(int width, int height) const;
QString toString(const TUint8* aData);
CxeVideoDetails createVideoPreset(TVideoQualitySet set);
--- a/camerauis/cameraxui/cxengine/inc/cxesettingscenrepstore.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxesettingscenrepstore.h Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -31,14 +31,15 @@
class XQSettingsKey;
-/*
-* Settings store intrerface.
+/*!
+* \class CxeSettingsStore
+* \brief Settings store intrerface.
*/
class CxeSettingsStore
{
public:
- /**
+ /*!
* This needs to be here to be able to delete an object
* of inherited class through mixin pointer.
* If this is not defined, deleting through the mixin pointer
@@ -46,35 +47,35 @@
*/
virtual ~CxeSettingsStore() {};
- /*
+ /*!
* resets the cenrep store
*/
virtual void reset() = 0;
- /*
+ /*!
* Reads a value from cenrep
* @param "key" - setting key
* @param "value" - setting value read from cenrep
*/
virtual CxeError::Id get(const QString& key, QVariant &value) = 0;
- /*
- * Reads a value from cenrep
+ /*!
+ * Reads a value from cenrep and starts monitoring changes
* @param "uid" - UID of the component that own setting key
* @param "key" - setting key id
* @param "type" - type of setting key
* @param "value" - setting value read from cenrep
*/
- virtual void get(long int uid, unsigned long int key, Cxe::SettingKeyType type, QVariant &value) = 0;
+ virtual void startMonitoring(long int uid, unsigned long int key, Cxe::SettingKeyType type, QVariant &value) = 0;
- /*
+ /*!
* Sets a new value to cenrep
* @param "key" - setting key
* @param "newValue" - new value set to the key in cenrep
*/
virtual CxeError::Id set(const QString& key,const QVariant newValue) = 0;
- /*
+ /*!
* Reads/loads all run-time settings values from cenrep
* @param QList<QString> contains list of all runtime key ids which we use to load values from cenrep.
* returns: QHash container, "contains" values associated with each key that are read from cenrep
@@ -87,8 +88,9 @@
-/*
-* CxeSettingsCenRepStore class implements CxeSettingsStore.
+/*!
+* \class CxeSettingsCenRepStore
+* \brief Class implements CxeSettingsStore.
* This class uses CenRep key mechanism for storing and retrieving settings information.
*/
class CxeSettingsCenRepStore : public QObject,
@@ -103,51 +105,18 @@
~CxeSettingsCenRepStore();
public: // from base class
- /*
- * resets the cenrep store
- */
+
void reset();
-
- /*
- * Reads a value from cenrep
- * @param "key" - setting key
- * @param "value" - setting value read from cenrep
- */
CxeError::Id get(const QString& key, QVariant &value);
-
- /*
- * Reads a value from cenrep
- * @param "uid" - UID of the component that own setting key
- * @param "key" - setting key id
- * @param "type" - type of setting key
- * @param "value" - setting value read from cenrep
- */
- void get(long int uid, unsigned long int key, Cxe::SettingKeyType type, QVariant &value);
-
- /*
- * Sets a new value to cenrep
- * @param "key" - setting key
- * @param "newValue" - new value set to the key in cenrep
- */
+ void startMonitoring(long int uid, unsigned long int key, Cxe::SettingKeyType type, QVariant &value);
CxeError::Id set(const QString& key,const QVariant newValue);
-
- /*
- * Reads/loads all run-time settings values from cenrep
- * @param QList<QString> contains list of all runtime key ids which we use to load values from cenrep.
- * returns: QHash container, "contains" values associated with each key that are read from cenrep
- * NOTE: loading runtime settings should be done only ONCE at start-up. Its an overhead to read runtime keys
- * unnecessarily multiple times as the values of the runtime keys are not changed.
- * Runtime keys are only used to configure camerax application.
- */
QHash<QString, QVariantList> loadRuntimeSettings(QList<QString>& settingKeys);
signals:
-
void settingValueChanged(long int uid, unsigned long int key, QVariant value);
private slots:
-
void handleValueChanged(XQSettingsKey key, QVariant value);
private:
@@ -163,22 +132,13 @@
};
private:
-
- /*
- * add's key mapping to the hash container.
- */
+
void addKeyMapping(QString key,
unsigned long int keyid,
XQSettingsManager::Type type,
bool readOnly = false);
- /*
- * Generates XQSettingsKey from given setting/runtime key
- */
+
XQSettingsKey generateXQSettingsKey(const QString& key,CxeError::Id& error);
-
- /*
- * maps "string" type setting key ids to cenrep key ids that XQSettingsManager understands
- */
void mapKeys();
protected:
@@ -191,8 +151,9 @@
};
-/*
- * Settings store that reads key values from cenrep and keeps
+/*!
+ * \class CxeSettingsLocalStore
+ * \brief Settings store that reads key values from cenrep and keeps
* cached copies of them in memory. Doesn't write anything back
* to cenrep.
*/
@@ -204,19 +165,9 @@
CxeSettingsLocalStore();
~CxeSettingsLocalStore();
- /*
- * Reads a value from local store.
- * @param "key" - setting key
- * @param "value" - setting value read from cenrep
- */
CxeError::Id get(const QString& key, QVariant &value);
+ CxeError::Id set(const QString& key, const QVariant newValue);
- /*
- * Sets a new value to local store
- * @param "key" - setting key
- * @param "newValue" - new value set to the key in cenrep
- */
- CxeError::Id set(const QString& key, const QVariant newValue);
private:
bool useValueFromCenrep(const QString &key) const;
--- a/camerauis/cameraxui/cxengine/inc/cxesettingscontrolsymbian.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxesettingscontrolsymbian.h Thu Jul 15 01:55:05 2010 +0300
@@ -51,8 +51,8 @@
void updateBrightnessSetting(QVariant newValue);
void updateExposureModeSetting(QVariant newValue);
void updateExposureCompensationSetting(QVariant newValue);
-
void updateFlashSetting(QVariant newValue);
+ void updateFaceTrackingSetting(QVariant newValue);
private:
CxeCameraDevice &mCameraDevice;
--- a/camerauis/cameraxui/cxengine/inc/cxesettingsmodelimp.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxesettingsmodelimp.h Thu Jul 15 01:55:05 2010 +0300
@@ -62,7 +62,7 @@
void loadImageScenes();
void loadVideoScenes();
- void loadSceneData(CxeScene ¤tScene, CxeScene &sceneDefaultSettings);
+ CxeError::Id loadSceneData(const QString &newScene, CxeScene ¤tSceneSettings);
CxeError::Id sceneSettingValue(const QString &key, QVariant &value);
CxeError::Id setSceneSettingValue(const QString &key, QVariant newValue);
@@ -70,6 +70,10 @@
CxeError::Id videoScene(const QString &sceneId, CxeScene &sceneSettings);
CxeError::Id imageScene(const QString &sceneId, CxeScene &sceneSettings);
+
+ void restoreImageSettings();
+ void restoreVideoSettings();
+
private:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/inc/cxesnapshotcontrol.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef CXESNAPSHOTCONTROL_H
+#define CXESNAPSHOTCONTROL_H
+
+#include <QObject>
+#include "cxeerror.h"
+#include "cxenamespace.h"
+
+class CxeCameraDevice;
+class CxeSnapshotControlPrivate;
+
+/*!
+* Snapshot control class.
+*/
+class CxeSnapshotControl : public QObject
+{
+ Q_OBJECT
+
+public:
+
+ // State Machine
+ enum State {
+ //! Idle, snapshot not active.
+ Idle = 0x01,
+ //! Active, snapshot events provided after successful capture.
+ Active = 0x02
+ };
+
+
+ explicit CxeSnapshotControl(CxeCameraDevice &device);
+ virtual ~CxeSnapshotControl();
+
+public:
+ State state() const;
+ QSize calculateSnapshotSize(const QSize& displaySize, Cxe::AspectRatio aspectRatio) const;
+ void start(const QSize &size);
+ void stop();
+
+signals:
+ void stateChanged(CxeSnapshotControl::State newState, CxeError::Id status);
+ void snapshotReady(CxeError::Id status, const QImage &snapshot);
+
+public slots:
+ void handleCameraEvent(int id, int error);
+
+private:
+ CxeSnapshotControlPrivate *d;
+
+ Q_DISABLE_COPY(CxeSnapshotControl)
+ friend class CxeSnapshotControlPrivate;
+};
+
+Q_DECLARE_METATYPE(CxeSnapshotControl::State)
+
+#endif // CXESNAPSHOTCONTROL_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/inc/cxesnapshotcontrolprivate.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef CXESNAPSHOTCONTROLPRIVATE_H
+#define CXESNAPSHOTCONTROLPRIVATE_H
+
+
+#include <QObject>
+#include "cxeerror.h"
+#include "cxestatemachine.h"
+
+class CxeSnapshotControl;
+class CxeCameraDevice;
+
+
+/*!
+* Snapshot control private implementation.
+*/
+class CxeSnapshotControlPrivate : public CxeStateMachine
+{
+private:
+ CxeSnapshotControlPrivate(CxeSnapshotControl *parent, CxeCameraDevice &device);
+ virtual ~CxeSnapshotControlPrivate();
+
+protected: // from CxeStateMachine
+ void handleStateChanged(int newStateId, CxeError::Id error);
+
+private:
+ CxeSnapshotControl::State state() const;
+ void initializeStates();
+ QSize calculateSnapshotSize(const QSize &displaySize, Cxe::AspectRatio aspectRatio) const;
+ void start(const QSize &size);
+ void stop();
+ void handleCameraEvent(int id, int error);
+ QImage snapshot();
+
+private:
+ CxeSnapshotControl *q;
+ CxeCameraDevice &mDevice;
+
+ friend class CxeSnapshotControl;
+};
+
+#endif // CXESNAPSHOTCONTROLPRIVATE_H
--- a/camerauis/cameraxui/cxengine/inc/cxesoundplayersymbian.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxesoundplayersymbian.h Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -19,11 +19,13 @@
#include <QObject>
#include <QMetaType>
+#include <QVariant>
#include <mdaaudiosampleplayer.h>
#include "cxestatemachine.h"
class CMdaAudioPlayerUtility;
class CxeCameraDeviceControlSymbian;
+class CxeSettings;
class CxeSoundPlayerSymbian : public QObject,
public CxeStateMachine,
@@ -31,7 +33,7 @@
{
Q_OBJECT
public:
- /**
+ /*!
* CaptureSound enum defines different types of capture sounds
*/
enum CaptureSound {
@@ -47,7 +49,7 @@
AutoFocus
};
- /*
+ /*!
* Sound player states.
*/
enum State {
@@ -64,20 +66,20 @@
Playing = 0x08
};
- CxeSoundPlayerSymbian(CaptureSound soundId);
+ CxeSoundPlayerSymbian(CaptureSound soundId, CxeSettings &settings);
virtual ~CxeSoundPlayerSymbian();
- /**
- * Plays the currently open capture sound.
- */
void play();
+public slots:
+ void enableSound(long int uid, unsigned long int key, QVariant value);
+
protected: // from CxeStateMachine
void handleStateChanged(int newStateId, CxeError::Id error);
signals:
- /**
- * playComlete signal is emitted when sound has been played.
+ /*!
+ * playComplete signal is emitted when sound has been played.
* @param error Contains status information whether there was a problem with playing or not
*/
void playComplete(int error);
@@ -89,26 +91,22 @@
void MapcPlayComplete(TInt aStatus);
private:
- /**
- * Get current sound player state.
- */
State state() const;
-
- /**
- *
- */
void doOpen();
-
- /**
- * Initialize CxeStateMachine.
- */
void initializeStates();
+ void checkCaptureSoundSettings();
//! Own.
CMdaAudioPlayerUtility *mAudioPlayer;
//! Currently opened sound file
CxeSoundPlayerSymbian::CaptureSound mSoundId;
+
+ bool mUseSound;
+ bool mCaptureSoundForced;
+
+ CxeSettings &mSettings;
+
};
Q_DECLARE_METATYPE(CxeSoundPlayerSymbian::State)
--- a/camerauis/cameraxui/cxengine/inc/cxestillcapturecontrolsymbian.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxestillcapturecontrolsymbian.h Thu Jul 15 01:55:05 2010 +0300
@@ -38,6 +38,7 @@
class CxeImageDataQueue;
class CxeImageDataQueueSymbian;
class CxeViewfinderControl;
+class CxeSnapshotControl;
class CxeSensorEventHandler;
class CxeCameraDeviceControl;
class CxeAutoFocusControl;
@@ -59,6 +60,7 @@
CxeStillCaptureControlSymbian(CxeCameraDevice &cameraDevice,
CxeViewfinderControl &viewfinderControl,
+ CxeSnapshotControl &snapshotControl,
CxeCameraDeviceControl &cameraDeviceControl,
CxeFilenameGenerator &nameGenerator,
CxeSensorEventHandler &sensorEventHandler,
@@ -93,7 +95,7 @@
void prepareZoomForStill(int ecamStillResolutionIndex);
protected: // from CxeStateMachine
- void handleStateChanged( int newStateId, CxeError::Id error );
+ void handleStateChanged(int newStateId, CxeError::Id error);
protected slots:
@@ -104,9 +106,14 @@
// notification for when camera is released
void prepareForRelease();
- // ECam events
- void handleCameraEvent( int eventUid, int error );
- void handleImageData( MCameraBuffer *buffer, int error );
+ // ECAM events
+ void handleCameraEvent(int eventUid, int error);
+
+ // Image data event
+ void handleImageData(MCameraBuffer *buffer, int error);
+
+ // Snapshot event
+ void handleSnapshotReady(CxeError::Id status, const QImage &snapshot);
// settings call back
void handleSettingValueChanged(const QString& settingId,QVariant newValue);
@@ -128,9 +135,7 @@
CCamera::TFormat supportedStillFormat(Cxe::CameraIndex cameraIndex);
int prepareStillSnapshot();
CxeError::Id getImageQualityDetails(CxeImageDetails &imageInfo);
- TSize getSnapshotSize() const;
void handleSnapshotEvent(CxeError::Id error);
- QPixmap extractSnapshot();
void initializeStates();
void prepare();
void updateRemainingImagesCounter();
@@ -141,6 +146,7 @@
CxeImageDataQueueSymbian *mImageDataQueue; // own
CxeCameraDevice &mCameraDevice;
CxeViewfinderControl &mViewfinderControl;
+ CxeSnapshotControl &mSnapshotControl;
CxeCameraDeviceControl &mCameraDeviceControl;
CxeFilenameGenerator &mFilenameGenerator; //! @todo could be shared with video capture control?
CxeSensorEventHandler &mSensorEventHandler;
@@ -162,20 +168,6 @@
QList<TSize> mECamSupportedImageResolutions;
//current image quality details in use
CxeImageDetails mCurrentImageDetails;
-
-private: // Helper class
-
- class CxeCameraBufferCleanup
- {
- public:
- CxeCameraBufferCleanup(MCameraBuffer* buffer) : mBuffer(buffer) {}
- ~CxeCameraBufferCleanup() { if (mBuffer) { mBuffer->Release(); } }
-
- private:
- Q_DISABLE_COPY(CxeCameraBufferCleanup)
-
- MCameraBuffer* mBuffer;
- };
};
#endif // CXESTILLCAPTURECONTROLSYMBIAN_H
--- a/camerauis/cameraxui/cxengine/inc/cxethumbnailmanagersymbian.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxethumbnailmanagersymbian.h Thu Jul 15 01:55:05 2010 +0300
@@ -21,6 +21,7 @@
#include <QObject>
#include <QString>
#include <QPixmap>
+#include <QImage>
// forward declaration
class ThumbnailManager;
@@ -44,20 +45,13 @@
/**
* Creates from given thumbnail.
*/
- virtual void createThumbnail(const QString& filename, QPixmap thumbnail);
+ virtual void createThumbnail(const QString &filename, const QImage &thumbnail);
/**
* Cancels thumbnail creation.
*/
virtual void cancelThumbnail(const QString& filename);
-signals:
-
- /**
- * Informs clients about thumbnail ready event
- */
- void thumbnailReady(QPixmap thumbnail, int error);
-
private slots:
/**
@@ -66,7 +60,7 @@
void thumbnailReady(QPixmap thumbnail, void * data, int id, int error);
private:
- ThumbnailManager* mThumbnailManager;
+ ThumbnailManager *mThumbnailManager;
// file name, thumbnail id hash table
QHash<QString, int> mThumbnailRequests;
};
--- a/camerauis/cameraxui/cxengine/inc/cxevideocapturecontrolsymbian.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxevideocapturecontrolsymbian.h Thu Jul 15 01:55:05 2010 +0300
@@ -38,6 +38,7 @@
class CxeQualityPresets;
class CxeFilenameGenerator;
class CxeViewfinderControl;
+class CxeSnapshotControl;
class CxeStillImageSymbian;
class CxeSoundPlayerSymbian;
class CxeCameraDeviceControl;
@@ -55,6 +56,7 @@
CxeVideoCaptureControlSymbian(CxeCameraDevice &cameraDevice,
CxeViewfinderControl &viewfinderControl,
+ CxeSnapshotControl &snapshotControl,
CxeCameraDeviceControl &cameraDeviceControl,
CxeFilenameGenerator &nameGenerator,
CxeSettings &settings,
@@ -75,9 +77,6 @@
QPixmap snapshot() const;
QList<CxeVideoDetails> supportedVideoQualities();
-public: // public member functions, not in client API
- void handleSnapshotEvent(CxeError::Id error);
-
public: // functions from MVideoRecorderUtilityObserver
void MvruoOpenComplete(TInt aError);
void MvruoPrepareComplete(TInt aError);
@@ -98,14 +97,14 @@
void deinit();
//! Notification that videocapture sound has been played
void handleSoundPlayed();
+ //! Snapshot has been received from adaptiation.
+ void handleSnapshotReady(CxeError::Id status, const QImage &snapshot);
protected slots:
// notifications when ECam reference is changed
void prepareForCameraDelete();
void handleCameraAllocated(CxeError::Id error);
void prepareForRelease();
- // ECam events
- void handleCameraEvent(int eventUid, int error);
// settings call back
void handleSettingValueChanged(const QString& settingId,QVariant newValue);
// scene mode change
@@ -114,19 +113,19 @@
void handleDiskSpaceChanged();
private: // helper methods
- CxeError::Id findVideoController(const TDesC8& aMimeType, const TDesC& aPreferredSupplier);
void releaseResources();
void initializeStates();
- CxeError::Id getVideoQualityDetails(CxeVideoDetails &videoInfo);
- int prepareVideoSnapshot();
+ void getVideoQualityDetails(CxeVideoDetails &videoInfo);
void initVideoRecorder();
void open();
void prepare();
- TSize getSnapshotSize() const;
virtual void createVideoRecorder();
- void calculateRemainingTime(CxeVideoDetails videoDetails, int &time);
- TFourCC audioType(const QString& str);
+ int calculateRemainingTime(const CxeVideoDetails& videoDetails);
void updateRemainingRecordingTimeCounter();
+ void generateFilename();
+ void handlePrepareFailed();
+ void handleComposeFailed(int error);
+ void emulateNormalStopping();
protected: // protected data
//! Video Recorder
@@ -141,6 +140,7 @@
CxeCameraDevice &mCameraDevice;
CxeCameraDeviceControl &mCameraDeviceControl;
CxeViewfinderControl &mViewfinderControl;
+ CxeSnapshotControl &mSnapshotControl;
CxeFilenameGenerator &mFilenameGenerator;
CxeSettings &mSettings;
CxeQualityPresets &mQualityPresets;
@@ -150,8 +150,6 @@
//! Soundplayers, own
CxeSoundPlayerSymbian *mVideoStartSoundPlayer;
CxeSoundPlayerSymbian *mVideoStopSoundPlayer;
- //! New file name generated for the video prepare.
- QString mNewFileName;
//! Current video file name
QString mCurrentFilename;
//video resolutions supported by ICM
--- a/camerauis/cameraxui/cxengine/inc/cxevideorecorderutility.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxevideorecorderutility.h Thu Jul 15 01:55:05 2010 +0300
@@ -18,36 +18,36 @@
#define CXEVIDEORECORDERUTILITY_H_
#include <QObject>
+#include <QString>
+#include <QSize>
-// interface class for usage of CVideoRecorderUtility
+/*!
+* Video Recorder Utility interface.
+*/
class CxeVideoRecorderUtility
{
public:
virtual ~CxeVideoRecorderUtility() {}
- virtual TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination,
- TInt aFunction,
- const TDesC8& aDataTo1,
- const TDesC8& aDataTo2) = 0;
- virtual void OpenFileL(const TDesC& aFileName,
- TInt aCameraHandle,
- TUid aControllerUid,
- TUid aVideoFormat,
- const TDesC8& aVideoType = KNullDesC8,
- TFourCC aAudioType = KMMFFourCCCodeNULL) = 0;
- virtual void SetVideoFrameSizeL(TSize aSize) = 0;
- virtual void SetVideoFrameRateL(TInt aRate) = 0;
- virtual void SetVideoBitRateL(TInt aRate) = 0;
- virtual void SetAudioEnabledL(TBool aEnable) = 0;
- virtual void SetMaxClipSizeL(TInt aClipSizeInBytes) = 0;
- virtual void Close() = 0;
- virtual void Prepare() = 0;
- virtual void Record() = 0;
- virtual int Stop() = 0;
- virtual void PauseL() = 0;
- virtual TTimeIntervalMicroSeconds RecordTimeAvailable() = 0;
- virtual TTimeIntervalMicroSeconds DurationL() = 0;
+ virtual void open(int cameraHandle,
+ const QString &filename,
+ const QString &fileMimeType,
+ const QString &supplier,
+ const QString &videoType,
+ const QString &aAudioType) = 0;
+ virtual void setVideoFrameSize(const QSize& size) = 0;
+ virtual void setVideoFrameRate(int rate) = 0;
+ virtual void setVideoBitRate(int rate) = 0;
+ virtual void setAudioEnabled(bool enable) = 0;
+ virtual void setVideoMaxSize(int sizeInBytes) = 0;
+ virtual void close() = 0;
+ virtual void prepare() = 0;
+ virtual void record() = 0;
+ virtual void stop(bool asynchronous = false) = 0;
+ virtual void pause() = 0;
+ virtual int availableRecordingTime() = 0;
+ virtual int duration() = 0;
protected:
CxeVideoRecorderUtility() {}
--- a/camerauis/cameraxui/cxengine/inc/cxevideorecorderutilitysymbian.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/inc/cxevideorecorderutilitysymbian.h Thu Jul 15 01:55:05 2010 +0300
@@ -24,37 +24,38 @@
{
public:
- CxeVideoRecorderUtilitySymbian(MVideoRecorderUtilityObserver& aObserver,
- TInt aPriority=EMdaPriorityNormal,
- TMdaPriorityPreference aPref=EMdaPriorityPreferenceTimeAndQuality);
-
+ CxeVideoRecorderUtilitySymbian(MVideoRecorderUtilityObserver& aObserver);
~CxeVideoRecorderUtilitySymbian();
- TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination,
- TInt aFunction,
- const TDesC8& aDataTo1,
- const TDesC8& aDataTo2);
- void OpenFileL(const TDesC& aFileName,
- TInt aCameraHandle,
- TUid aControllerUid,
- TUid aVideoFormat,
- const TDesC8& aVideoType = KNullDesC8,
- TFourCC aAudioType = KMMFFourCCCodeNULL);
- void SetVideoFrameSizeL(TSize aSize);
- void SetVideoFrameRateL(TInt aRate);
- void SetVideoBitRateL(TInt aRate);
- void SetAudioEnabledL(TBool aEnable);
- void SetMaxClipSizeL(TInt aClipSizeInBytes);
- void Close();
- void Prepare();
- void Record();
- int Stop();
- void PauseL();
- TTimeIntervalMicroSeconds RecordTimeAvailable();
- TTimeIntervalMicroSeconds DurationL();
+ virtual void open(int cameraHandle,
+ const QString &filename,
+ const QString &fileMimeType,
+ const QString &supplier,
+ const QString &videoType,
+ const QString &audioType);
+ virtual void setVideoFrameSize(const QSize& size);
+ virtual void setVideoFrameRate(int rate);
+ virtual void setVideoBitRate(int rate);
+ virtual void setAudioEnabled(bool enabled);
+ virtual void setVideoMaxSize(int sizeInBytes);
+ virtual void close();
+ virtual void prepare();
+ virtual void record();
+ virtual void stop(bool asynchronous = false);
+ virtual void pause();
+ virtual int availableRecordingTime();
+ virtual int duration();
+
+private:
+ void findControllerL(const QString& fileMimeType,
+ const QString& supplier,
+ TUid& controllerId,
+ TUid& formatId);
+
+ TFourCC audioFourCC(const QString& str);
+
private:
CVideoRecorderUtility *mVideoRecorder;
- int mStartuperror;
};
--- a/camerauis/cameraxui/cxengine/src/cxeautofocuscontrolsymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxeautofocuscontrolsymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -40,11 +40,14 @@
/*
* CxeAutoFocusControlSymbian::CxeAutoFocusControlSymbian
*/
-CxeAutoFocusControlSymbian::CxeAutoFocusControlSymbian(CxeCameraDevice &cameraDevice)
+CxeAutoFocusControlSymbian::CxeAutoFocusControlSymbian(CxeCameraDevice &cameraDevice,
+ CxeSettings &settings)
: CxeStateMachine("CxeAutoFocusControlSymbian"),
mCameraDevice(cameraDevice),
mAdvancedSettings(NULL),
- mCancelled(false)
+ mSettings(settings),
+ mCancelled(false),
+ mFaceTrackingOverride(false)
{
CX_DEBUG_ENTER_FUNCTION();
@@ -65,6 +68,13 @@
QObject::connect( &cameraDevice,
SIGNAL(prepareForRelease()),
this,SLOT(prepareForRelease()) );
+
+ // connect scene / setting change callbacks to settings control
+ QObject::connect(&mSettings,
+ SIGNAL(settingValueChanged(const QString&,QVariant)),
+ this,
+ SLOT(handleSettingValueChanged(const QString&,QVariant)));
+
OstTrace0(camerax_performance, CXEAUTOFOCUSCONTROLSYMBIAN_CREATE_MID2, "msg: e_CX_ENGINE_CONNECT_SIGNALS 0");
initializeResources();
@@ -91,25 +101,28 @@
*/
CxeError::Id CxeAutoFocusControlSymbian::start(bool soundEnabled)
{
- CX_DEBUG( ("CxeAutoFocusControlSymbian::start() <> state: %d, sound enabled: %d",
- state(), soundEnabled ) );
- mSoundEnabled = soundEnabled;
- int err = KErrNone;
-
CX_ASSERT_ALWAYS(mAdvancedSettings);
- if ( state() != CxeAutoFocusControl::InProgress && state() != CxeAutoFocusControl::Canceling ) {
- CX_DEBUG(("CxeAutoFocusControlSymbian::start() calling SetAutoFocusType"));
- mCancelled = false;
- setState(InProgress);
- setFocusRange(mAFRange);
- setFocusType(CCamera::CCameraAdvancedSettings::EAutoFocusTypeSingle);
- } else { // AF was started earlier, can't start until it completes
- err = KErrInUse;
+ CX_DEBUG( ("CxeAutoFocusControlSymbian::start() <> state: %d, sound enabled: %d",
+ state(), soundEnabled ) );
+
+ mSoundEnabled = soundEnabled;
+ CxeError::Id error = CxeError::None;
+
+ if (!isFixedFocusMode(mode())) {
+ if ( state() != CxeAutoFocusControl::InProgress && state() != CxeAutoFocusControl::Canceling ) {
+ CX_DEBUG(("CxeAutoFocusControlSymbian::start() calling SetAutoFocusType"));
+ mCancelled = false;
+ setState(InProgress);
+ setFocusRange(mAFRange);
+ setFocusType(CCamera::CCameraAdvancedSettings::EAutoFocusTypeSingle);
+ } else { // AF was started earlier, can't start until it completes
+ error = CxeError::InUse;
+ }
}
- CX_DEBUG( ("CxeAutoFocusControlSymbian::start() <= err : %d", err ) );
- return CxeErrorHandlingSymbian::map(err);
+ CX_DEBUG( ("CxeAutoFocusControlSymbian::start() <= error: %d", error ) );
+ return error;
}
@@ -123,7 +136,7 @@
CX_DEBUG_ASSERT(mAdvancedSettings);
- if (!mCancelled) {
+ if (!mCancelled && !isFixedFocusMode(mode())) {
if (state() == CxeAutoFocusControl::InProgress) {
// Need to stop current AF first. Wait for AF event to proceed.
setState(CxeAutoFocusControl::Canceling);
@@ -171,6 +184,14 @@
return mAfMode;
}
+/**
+* Is the given mode a fixed focus mode?
+*/
+bool CxeAutoFocusControlSymbian::isFixedFocusMode(CxeAutoFocusControl::Mode mode) const
+{
+ return (mode == CxeAutoFocusControl::Hyperfocal
+ || mode == CxeAutoFocusControl::Infinity);
+}
/*
* To check if Autofocus is supported
@@ -389,7 +410,15 @@
// we are interested only in the AF range.
if(scene.contains(CxeSettingIds::FOCAL_RANGE) && supported() ) {
+
setMode(static_cast<CxeAutoFocusControl::Mode>(scene[CxeSettingIds::FOCAL_RANGE].toInt()));
+
+ if (isFixedFocusMode(mode())) {
+ // Focus now if a fixed focus mode is used.
+ setFocusType(CCamera::CCameraAdvancedSettings::EAutoFocusTypeSingle);
+ // Set state to InProgress, so we know to set it ready in ECAM callback.
+ setState(CxeAutoFocusControl::InProgress);
+ }
}
CX_DEBUG_EXIT_FUNCTION();
@@ -457,4 +486,40 @@
return mSoundEnabled;
}
+/*!
+* Handle new setting value.
+* New value is set to camera.
+* \param settingId The id of the updated setting
+* \param newValue A new value for the updated setting
+*/
+void CxeAutoFocusControlSymbian::handleSettingValueChanged(const QString& settingId, QVariant newValue)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ if (settingId == CxeSettingIds::FACE_TRACKING) {
+ // Updating AF mode when face tracking is activated
+ // in scene mode which doesn't support face tracking
+ if (newValue.toInt()) {
+ //Face tracking enabled
+ if(mAfMode == CxeAutoFocusControl::Infinity ||
+ mAfMode == CxeAutoFocusControl::Hyperfocal) {
+ mPreviousAFMode = mAfMode;
+ setMode(CxeAutoFocusControl::Auto);
+ mFaceTrackingOverride = true;
+ }
+ } else {
+ //Face tracking disabled
+ if (mFaceTrackingOverride) {
+ mAfMode = mPreviousAFMode;
+ setMode(mAfMode);
+ mFaceTrackingOverride = false;
+ }
+ }
+
+ } else {
+ // do nothing
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
// end of file
--- a/camerauis/cameraxui/cxengine/src/cxecameradevice.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxecameradevice.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -148,6 +148,7 @@
TRAPD(errorImgPr, mImageProcessor =
CCamera::CCameraImageProcessing::NewL(*mCamera));
CX_DEBUG(("CCameraImageProcessing status: %d", errorImgPr));
+ Q_UNUSED(errorImgPr); // Avoid release build unused variable warning.
TRAPD(errorSnap, mCameraSnapshot =
CCamera::CCameraSnapshot::NewL(*mCamera));
--- a/camerauis/cameraxui/cxengine/src/cxediskmonitorprivate.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxediskmonitorprivate.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -72,14 +72,6 @@
// Get the current free space.
mLatestFreeBytes = free(false);
- // TESTING >>>
- /*
- static qint64 TEST = 20*1000*1000;
- TEST /= 2;
- mLatestFreeBytes = TEST;
- */
- // <<< TESTING
-
// If space has changed during monitoring, signal it now.
if (previousFree != mLatestFreeBytes && isMonitoring()) {
CX_DEBUG(("CxeDiskMonitorPrivate - Disk space changed %d -> %d bytes", previousFree, mLatestFreeBytes));
--- a/camerauis/cameraxui/cxengine/src/cxeengine.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxeengine.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -26,7 +26,7 @@
CX_DEBUG_ENTER_FUNCTION();
CxeEngineSymbian *res = new CxeEngineSymbian();
-
+ res->construct();
CX_DEBUG_EXIT_FUNCTION();
return res;
}
--- a/camerauis/cameraxui/cxengine/src/cxeenginesymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxeenginesymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -23,6 +23,7 @@
#include "cxevideocapturecontrolsymbian.h"
#include "cxesettingscontrolsymbian.h"
#include "cxeviewfindercontrolsymbian.h"
+#include "cxesnapshotcontrol.h"
#include "cxefilenamegeneratorsymbian.h"
#include "cxeautofocuscontrolsymbian.h"
#include "cxezoomcontrolsymbian.h"
@@ -38,6 +39,7 @@
#include "cxecameradevice.h"
#include "cxememorymonitor.h"
#include "cxediskmonitor.h"
+#include "cxegeotaggingtrail.h"
#include "OstTraceDefinitions.h"
#ifdef OST_TRACE_COMPILER_IN_USE
@@ -51,6 +53,7 @@
: mCameraDeviceControl(NULL),
mCameraDevice(NULL),
mViewfinderControl(NULL),
+ mSnapshotControl(NULL),
mStillCaptureControl(NULL),
mVideoCaptureControl(NULL),
mSettingsControl(NULL),
@@ -62,27 +65,12 @@
mFilenameGenerator(NULL),
mSensorEventHandler(NULL),
mQualityPresets(NULL),
- mFileSaveThread(NULL)
+ mFileSaveThread(NULL),
+ mDiskMonitor(NULL),
+ mMemoryMonitor(NULL),
+ mGeoTaggingTrail(NULL)
{
- CX_DEBUG_ENTER_FUNCTION();
-
- // Do secondary construction during reserve call.
- //! @todo temporarily commented as part of a hack to change the startup sequence
- // to avoid GOOM issues
- // connect(this, SIGNAL(reserveStarted()), this, SLOT(construct()));
-
- CxeCameraDeviceControlSymbian *deviceControl = new CxeCameraDeviceControlSymbian();
- mCameraDeviceControl = deviceControl;
- mCameraDevice = deviceControl->cameraDevice();
- CX_ASSERT_ALWAYS(mCameraDeviceControl);
- CX_ASSERT_ALWAYS(mCameraDevice);
-
- mCameraDeviceControl->init();
- //! @todo calling construct here is a hack to change the startup sequence
- // to avoid GOOM issues
- construct();
-
- CX_DEBUG_EXIT_FUNCTION();
+ CX_DEBUG_IN_FUNCTION();
}
@@ -110,7 +98,16 @@
// Check we do this only once.
if (!mSettingsModel) {
- OstTrace0(camerax_performance, CXEENGINESYMBIAN_CREATECONTROLS_IN, "e_CX_ENGINE_CREATE_CONTROLS 1");
+ OstTrace0(camerax_performance, CXEENGINESYMBIAN_CREATECONTROLS_IN, "msg: e_CX_ENGINE_CREATE_CONTROLS 1");
+
+ CxeCameraDeviceControlSymbian *deviceControl = new CxeCameraDeviceControlSymbian();
+ mCameraDeviceControl = deviceControl;
+ mCameraDevice = deviceControl->cameraDevice();
+
+ CX_ASSERT_ALWAYS(mCameraDeviceControl);
+ CX_ASSERT_ALWAYS(mCameraDevice);
+
+ mCameraDeviceControl->init();
CxeSettingsCenRepStore *settingsStore(NULL);
if (XQServiceUtil::isService()) {
@@ -124,11 +121,22 @@
CX_DEBUG_ASSERT(mSettingsModel);
mSettings = new CxeSettingsImp(*mSettingsModel);
-
+
+ // Loading current camera mode value from settings store and updating
+ // devicecontrol
+ Cxe::CameraMode cameraMode = Cxe::ImageMode;
+ int value;
+ CxeError::Id err = mSettings->get(CxeSettingIds::CAMERA_MODE, value);
+ if (!err) {
+ cameraMode = static_cast<Cxe::CameraMode>(value);
+ }
+ // set current camera mode to devicecontrol.
+ mCameraDeviceControl->setMode(cameraMode);
+
//! @todo a temporary hack to change the startup sequence to avoid GOOM problems
static_cast<CxeSettingsImp*>(mSettings)->loadSettings(mode());
-
-
+
+
// Connect P&S key updates to settings signal.
connect(settingsStore, SIGNAL(settingValueChanged(long int, unsigned long int, QVariant)),
mSettings, SIGNAL(settingValueChanged(long int, unsigned long int, QVariant)));
@@ -153,25 +161,32 @@
mViewfinderControl = new CxeViewfinderControlSymbian(*mCameraDevice,
*mCameraDeviceControl);
- mAutoFocusControl = new CxeAutoFocusControlSymbian(*mCameraDevice);
+ mSnapshotControl = new CxeSnapshotControl(*mCameraDevice);
+
+ mAutoFocusControl = new CxeAutoFocusControlSymbian(*mCameraDevice,
+ *mSettings);
mFileSaveThread = CxeFileSaveThreadFactory::createFileSaveThread();
mStillCaptureControl = new CxeStillCaptureControlSymbian(
- *mCameraDevice, *mViewfinderControl, *mCameraDeviceControl,
+ *mCameraDevice, *mViewfinderControl, *mSnapshotControl, *mCameraDeviceControl,
*mFilenameGenerator, *mSensorEventHandler, *mAutoFocusControl,
*mSettings, *mQualityPresets, *mFileSaveThread, *mDiskMonitor);
- mZoomControl = new CxeZoomControlSymbian( *mCameraDevice,
- *mCameraDeviceControl, *mSettings, *mFeatureManager);
+ mZoomControl = new CxeZoomControlSymbian(
+ *mCameraDevice, *mCameraDeviceControl, *mSettings, *mFeatureManager);
mVideoCaptureControl = new CxeVideoCaptureControlSymbian(
- *mCameraDevice, *mViewfinderControl, *mCameraDeviceControl,
+ *mCameraDevice, *mViewfinderControl, *mSnapshotControl, *mCameraDeviceControl,
*mFilenameGenerator, *mSettings, *mQualityPresets, *mDiskMonitor);
mSettingsControl = new CxeSettingsControlSymbian(*mCameraDevice, *mSettings);
- OstTrace0(camerax_performance, CXEENGINESYMBIAN_CREATECONTROLS_OUT, "e_CX_ENGINE_CREATE_CONTROLS 0");
+ mGeoTaggingTrail = new CxeGeoTaggingTrail(*mStillCaptureControl,
+ *mVideoCaptureControl,
+ *mSettings);
+
+ OstTrace0(camerax_performance, CXEENGINESYMBIAN_CREATECONTROLS_OUT, "msg: e_CX_ENGINE_CREATE_CONTROLS 0");
}
CX_DEBUG_EXIT_FUNCTION();
@@ -183,7 +198,7 @@
void CxeEngineSymbian::connectSignals()
{
CX_DEBUG_ENTER_FUNCTION();
- OstTrace0(camerax_performance, CXEENGINESYMBIAN_CONNECTSIGNALS_IN, "e_CX_ENGINE_CONNECT_SIGNALS 1");
+ OstTrace0(camerax_performance, CXEENGINESYMBIAN_CONNECTSIGNALS_IN, "msg: e_CX_ENGINE_CONNECT_SIGNALS 1");
// enabling scene setting change callbacks to Autofocus control
connect(mSettings,
@@ -200,7 +215,7 @@
// Connect signals for ECam events
connect(mCameraDeviceControl,
SIGNAL(cameraEvent(int,int)),
- mVideoCaptureControl,
+ mSnapshotControl,
SLOT(handleCameraEvent(int,int)));
connect(mCameraDeviceControl,
@@ -208,6 +223,11 @@
mAutoFocusControl,
SLOT(handleCameraEvent(int,int)));
+ connect(mCameraDeviceControl,
+ SIGNAL(cameraEvent(int,int)),
+ mStillCaptureControl,
+ SLOT(handleCameraEvent(int,int)));
+
// Connect signal for device ready events
connect(mCameraDeviceControl,
SIGNAL(deviceReady()),
@@ -240,19 +260,27 @@
// Connect file saving thread to snapshot signals and video saved signal.
// Image saving it handles internally.
connect(mStillCaptureControl,
- SIGNAL(snapshotReady(CxeError::Id, const QPixmap&, int)),
+ SIGNAL(snapshotReady(CxeError::Id, const QImage&, int)),
mFileSaveThread,
- SLOT(handleSnapshotReady(CxeError::Id, const QPixmap&, int)));
+ SLOT(handleSnapshotReady(CxeError::Id, const QImage&, int)));
connect(mVideoCaptureControl,
SIGNAL(videoComposed(CxeError::Id, const QString&)),
mFileSaveThread,
SLOT(handleVideoSaved(CxeError::Id, const QString&)));
connect(mVideoCaptureControl,
- SIGNAL(snapshotReady(CxeError::Id, const QPixmap&, const QString&)),
+ SIGNAL(snapshotReady(CxeError::Id, const QImage&, const QString&)),
mFileSaveThread,
- SLOT(handleSnapshotReady(CxeError::Id, const QPixmap&, const QString&)));
+ SLOT(handleSnapshotReady(CxeError::Id, const QImage&, const QString&)));
+
- OstTrace0(camerax_performance, CXEENGINESYMBIAN_CONNECTSIGNALS_OUT, "e_CX_ENGINE_CONNECT_SIGNALS 0");
+ // stop location trail when releasing camera.
+ connect(mCameraDevice,
+ SIGNAL(prepareForRelease()),
+ mGeoTaggingTrail,
+ SLOT(stop()),
+ Qt::UniqueConnection);
+
+ OstTrace0(camerax_performance, CXEENGINESYMBIAN_CONNECTSIGNALS_OUT, "msg: e_CX_ENGINE_CONNECT_SIGNALS 0");
CX_DEBUG_EXIT_FUNCTION();
}
@@ -261,11 +289,16 @@
{
CX_DEBUG_ENTER_FUNCTION();
+ // Saving current camera mode to cenrep
+ saveMode();
+
+ delete mGeoTaggingTrail;
delete mAutoFocusControl;
delete mZoomControl;
delete mSettingsControl;
delete mStillCaptureControl;
delete mVideoCaptureControl;
+ delete mSnapshotControl;
delete mViewfinderControl;
delete mFilenameGenerator;
delete mDiskMonitor;
@@ -290,6 +323,11 @@
return *mViewfinderControl;
}
+CxeSnapshotControl &CxeEngineSymbian::snapshotControl()
+{
+ return *mSnapshotControl;
+}
+
CxeStillCaptureControl &CxeEngineSymbian::stillCaptureControl()
{
return *mStillCaptureControl;
@@ -310,13 +348,17 @@
return *mZoomControl;
}
-// Get the settings handle
+/*!
+Returns the settings handle
+*/
CxeSettings &CxeEngineSymbian::settings()
{
return *mSettings;
}
-// Get the sensor event handle
+/*!
+Returns the sensor event handle
+*/
CxeSensorEventHandler &CxeEngineSymbian::sensorEventHandler()
{
return *mSensorEventHandler;
@@ -329,14 +371,23 @@
}
/*!
-* Get memory monitor utility handle.
+* Returns memory monitor utility handle.
*/
CxeMemoryMonitor &CxeEngineSymbian::memoryMonitor()
{
return *mMemoryMonitor;
}
-/*
+
+/*!
+ Returns geotaggingtrail handle
+ */
+CxeGeoTaggingTrail &CxeEngineSymbian::geoTaggingTrail()
+{
+ return *mGeoTaggingTrail;
+}
+
+/*!
* Returns true, if the engine is ready or else false.
*/
bool CxeEngineSymbian::isEngineReady()
@@ -364,7 +415,7 @@
void CxeEngineSymbian::doInit()
{
CX_DEBUG_ENTER_FUNCTION();
- OstTrace0(camerax_performance, CXEENGINESYMBIAN_DOINIT_IN, "e_CX_ENGINE_DO_INIT 1");
+ OstTrace0(camerax_performance, CXEENGINESYMBIAN_DOINIT_IN, "msg: e_CX_ENGINE_DO_INIT 1");
mFilenameGenerator->init(mode());
// load settings whenever we change mode or start camera or switch camera
@@ -373,26 +424,44 @@
settingsImp->loadSettings(mode());
}
-
if (mode() == Cxe::ImageMode) {
+ // start geotagging trail in image mode.
+ startGeotaggingTrail();
mVideoCaptureControl->deinit();
mStillCaptureControl->init();
} else if (mode() == Cxe::VideoMode) {
mStillCaptureControl->deinit();
+ if (mGeoTaggingTrail) {
+ // in video mode, Geotagging is not supported for now.
+ mGeoTaggingTrail->stop();
+ }
mVideoCaptureControl->init();
}
- OstTrace0(camerax_performance, CXEENGINESYMBIAN_DOINIT_OUT, "e_CX_ENGINE_DO_INIT 0");
+ OstTrace0(camerax_performance, CXEENGINESYMBIAN_DOINIT_OUT, "msg: e_CX_ENGINE_DO_INIT 0");
CX_DEBUG_EXIT_FUNCTION();
}
+/*!
+ * Returns camera mode.
+ */
Cxe::CameraMode CxeEngineSymbian::mode() const
{
return mCameraDeviceControl->mode();
}
/*!
+ * Sets the camera mode.
+ * \parama mode New camera mode
+ */
+void CxeEngineSymbian::setMode(Cxe::CameraMode mode)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mCameraDeviceControl->setMode(mode);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+/*!
Check if we need to reserve camera.
*/
bool CxeEngineSymbian::reserveNeeded()
@@ -457,6 +526,7 @@
void CxeEngineSymbian::initMode(Cxe::CameraMode cameraMode)
{
CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXEENGINE_INITMODE_IN, "msg: e_CX_ENGINE_INIT_MODE 1");
if (mode() == cameraMode) {
CX_DEBUG(("initMode() called for current mode"));
@@ -508,6 +578,7 @@
}
}
+ OstTrace0(camerax_performance, CXEENGINE_INITMODE_OUT, "msg: e_CX_ENGINE_INIT_MODE 0");
CX_DEBUG_EXIT_FUNCTION();
}
@@ -519,4 +590,44 @@
CX_DEBUG_EXIT_FUNCTION();
}
+
+/*!
+* Saves current mode to the cenrep
+*/
+void CxeEngineSymbian::saveMode()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (mCameraDeviceControl && mSettings) {
+ int value = mCameraDeviceControl->mode();
+ mSettings->set(CxeSettingIds::CAMERA_MODE, value);
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+/*!
+* Start geotagging trail.
+*/
+void CxeEngineSymbian::startGeotaggingTrail()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXEENGINE_START_GEO_IN, "msg: e_CX_ENGINE_START_GEOTAGGING 1");
+
+ if (mGeoTaggingTrail && mSettings) {
+ // location trail is limited to image mode only for now.
+ int value = Cxe::GeoTaggingDisclaimerDisabled;
+ mSettings->get(CxeSettingIds::GEOTAGGING_DISCLAIMER, value);
+
+ // we start location trail only when Geotagging First-time-use note is accepted by user.
+ if (value == Cxe::GeoTaggingDisclaimerDisabled) {
+ mGeoTaggingTrail->start();
+ }
+ }
+
+ OstTrace0(camerax_performance, CXEENGINE_START_GEO_OUT, "msg: e_CX_ENGINE_START_GEOTAGGING 0");
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
// End of file
--- a/camerauis/cameraxui/cxengine/src/cxefilenamegeneratorsymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxefilenamegeneratorsymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -28,6 +28,11 @@
#include "cxeerror.h"
#include "cxeerrormappingsymbian.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cxefilenamegeneratorsymbianTraces.h"
+#endif
+
using namespace Cxe;
@@ -48,7 +53,10 @@
const char MAX_CHAR = 'Z';
const TInt64 KMinRequiredSpaceImage = 2000000;
-const TInt64 KMinRequiredSpaceVideo = 4000000;
+
+// Whether there's enough space for video or not is handled lower in the SW stack
+// so this is set to 0 to fix an error
+const TInt64 KMinRequiredSpaceVideo = 0;
@@ -76,6 +84,7 @@
mCurrentMode(mode)
{
CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXEFILENAMEGENERATOR_1, "msg: e_CX_FILENAMEGENERATOR_NEW 1");
// Set default values (used in case of error retrieving values)
mCurrentMonth = "";
@@ -89,6 +98,7 @@
mSettings.get(CxeSettingIds::FNAME_IMAGE_COUNTER, mImageCounter);
mSettings.get(CxeSettingIds::FNAME_VIDEO_COUNTER, mVideoCounter);
+ OstTrace0(camerax_performance, CXEFILENAMEGENERATOR_2, "msg: e_CX_FILENAMEGENERATOR_NEW 0");
CX_DEBUG_EXIT_FUNCTION();
}
@@ -149,6 +159,7 @@
CxeError::Id CxeFilenameGeneratorSymbian::generateFilename(QString &qfName, const QString &fileExt)
{
CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXEFILENAMEGENERATORSYMBIAN_GENERATENAME_1, "msg: e_CX_GENERATE_FILENAME 1");
// Make sure that the path for images/videos exists
QString path;
@@ -164,6 +175,7 @@
}
}
+ OstTrace0(camerax_performance, CXEFILENAMEGENERATORSYMBIAN_GENERATENAME_2, "msg: e_CX_GENERATE_FILENAME 0");
CX_DEBUG_EXIT_FUNCTION();
return CxeErrorHandlingSymbian::map(err);
}
@@ -350,6 +362,7 @@
int CxeFilenameGeneratorSymbian::selectFolder(QString &suggestedPath)
{
CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXEFILENAMEGENERATORSYMBIAN_SELECTFOLDER_1, "msg: e_CX_SELECT_FOLDER 1");
// Compose the path string and select counter based on mode.
QString basePath = "%1%2\\";
@@ -425,6 +438,7 @@
}
}
+ OstTrace0(camerax_performance, CXEFILENAMEGENERATORSYMBIAN_SELECTFOLDER_2, "msg: e_CX_SELECT_FOLDER 0");
CX_DEBUG_EXIT_FUNCTION();
// We fallback to basePath in case of unknown errors,
@@ -441,6 +455,7 @@
int CxeFilenameGeneratorSymbian::initMonthFolders()
{
CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXEFILENAMEGENERATORSYMBIAN_INITFOLDERS_1, "msg: e_CX_INIT_MONTH_FOLDER 1");
// Month folder: YYYYMM, with suffix: YYYYMMXX
QString monthFolder = QDate::currentDate().toString("yyyyMM");
@@ -486,6 +501,7 @@
CX_DEBUG(("[FATAL] - Could not create month folder, error %d", status));
}
+ OstTrace0(camerax_performance, CXEFILENAMEGENERATORSYMBIAN_INITFOLDERS_2, "msg: e_CX_INIT_MONTH_FOLDER 0");
CX_DEBUG_EXIT_FUNCTION();
return status;
}
@@ -593,6 +609,7 @@
CxeError::Id CxeFilenameGeneratorSymbian::init(Cxe::CameraMode mode)
{
CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXEFILENAMEGENERATORSYMBIAN_INIT_1, "msg: e_CX_FILENAMEGENERATOR_INIT 1");
mCurrentMode = mode;
int err = KErrNone;
@@ -617,6 +634,7 @@
}
}
+ OstTrace0(camerax_performance, CXEFILENAMEGENERATORSYMBIAN_INIT_2, "msg: e_CX_FILENAMEGENERATOR_INIT 0");
CX_DEBUG_EXIT_FUNCTION();
return CxeErrorHandlingSymbian::map(err);
}
--- a/camerauis/cameraxui/cxengine/src/cxefilesavethreadsymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxefilesavethreadsymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -180,15 +180,27 @@
// Use a dummy "image data item" with empty data and saved state for videos.
// We just need to harvest the file and provide snapshot to Thumbnail Manager.
QByteArray empty;
- CxeImageDataItem* item = new CxeImageDataItemSymbian(empty, filename, CxeStillImage::INVALID_ID, CxeImageDataItem::Saved);
- if(item) {
+ CxeImageDataItem* item = new CxeImageDataItemSymbian(empty,
+ filename,
+ CxeStillImage::INVALID_ID,
+ false,
+ CxeImageDataItem::Saved);
+ if (item) {
save(item);
}
}
+
CX_DEBUG_EXIT_FUNCTION();
}
-void CxeFileSaveThreadSymbian::handleSnapshotReady(CxeError::Id status, const QPixmap& snapshot, const QString& filename)
+/*!
+ * Handles snapshot event from CxeStillCaptureControl and CxeVideoCaptureControl.
+ *
+ * @param status Status of snapshot creation. CxeError::None if no error, otherwise contains the error code
+ * @param snapshot Snapshot as QImage
+ * @param filename Name of the file that the snapshot is from
+ */
+void CxeFileSaveThreadSymbian::handleSnapshotReady(CxeError::Id status, const QImage& snapshot, const QString& filename)
{
CX_DEBUG_ENTER_FUNCTION();
CX_DEBUG(("[INFO] current thread 0x%x", QThread::currentThreadId()));
@@ -199,8 +211,6 @@
if (!snapshot.isNull()) {
// QMutexLocker handles locking and unlocking automaticly.
QMutexLocker lock(&mSnapshotsMutex);
-
- //!@todo: Store as QImage once TNM API is fixed.
mSnapshots.insert(filename, snapshot);
}
}
@@ -208,7 +218,14 @@
CX_DEBUG_EXIT_FUNCTION();
}
-void CxeFileSaveThreadSymbian::handleSnapshotReady(CxeError::Id status, const QPixmap& snapshot, int id)
+/*!
+ * Handles snapshot event from CxeStillCaptureControl and CxeVideoCaptureControl.
+ *
+ * @param status Status of snapshot creation. CxeError::None if no error, otherwise contains the error code
+ * @param snapshot Snapshot as QImage
+ * @param id Id of the file that the snapshot is from
+ */
+void CxeFileSaveThreadSymbian::handleSnapshotReady(CxeError::Id status, const QImage& snapshot, int id)
{
CX_DEBUG_ENTER_FUNCTION();
CX_DEBUG(("[INFO] current thread 0x%x", QThread::currentThreadId()));
@@ -316,13 +333,13 @@
// so we can find the snapshot when harvesting is ready.
QString idString(QString::number(item->id()));
if (mSnapshots.contains(idString)) {
- const QPixmap& snapshot(mSnapshots[idString]);
+ QImage snapshot(mSnapshots[idString]);
mSnapshots.remove(idString);
mSnapshots.insert(path, snapshot);
}
}
- harvestFile(path);
+ harvestFile(path, qobject_cast<CxeImageDataItemSymbian*>(item)->isLocationEnabled());
}
// Delete item, since we own it
@@ -337,7 +354,7 @@
* Harvest one file.
* @param filename Path of the file to be harvested.
*/
-void CxeFileSaveThreadSymbian::harvestFile(const QString& filename)
+void CxeFileSaveThreadSymbian::harvestFile(const QString& filename, bool addLocation)
{
CX_DEBUG_ENTER_FUNCTION();
if (mHarvesterControl) {
@@ -345,8 +362,8 @@
QMutexLocker lock(&mSnapshotsMutex);
// harvest file ( filename, add to album, album id )
- CX_DEBUG(("Requesting harvesting for file: %s", filename.toAscii().constData()));
- CxeError::Id status = mHarvesterControl->harvestFile(filename, false, MDS_CAPTURED_ALBUM_ID);
+ CX_DEBUG(("Requesting harvesting for file: %s addLocation = %d", filename.toAscii().constData(), addLocation));
+ CxeError::Id status = mHarvesterControl->harvestFile(filename, addLocation, MDS_CAPTURED_ALBUM_ID);
CX_DEBUG(("Status for starting harvesting: %d", status));
// If there were errors, release any snapshot stored for this file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/src/cxegeotaggingtrail.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,74 @@
+/*
+* 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 "cxutils.h"
+#include "cxegeotaggingtrail.h"
+#include "cxegeotaggingtrailprivate.h"
+
+/*!
+* Constructor
+*/
+CxeGeoTaggingTrail::CxeGeoTaggingTrail(CxeStillCaptureControl &stillControl,
+ CxeVideoCaptureControl &videoControl,
+ CxeSettings &settings)
+ : d_ptr(new CxeGeoTaggingTrailPrivate(stillControl, videoControl, settings))
+{
+ // connect signal state changed signal.
+ connect(d_ptr, SIGNAL(stateChanged(CxeGeoTaggingTrail::State, CxeError::Id)),
+ this, SIGNAL(stateChanged(CxeGeoTaggingTrail::State, CxeError::Id)),
+ Qt::UniqueConnection);
+}
+
+
+/*!
+* Destructor
+*/
+CxeGeoTaggingTrail::~CxeGeoTaggingTrail()
+{
+ delete d_ptr;
+}
+
+/*!
+* Slot to start location trail.
+*/
+void CxeGeoTaggingTrail::start()
+{
+ Q_D(CxeGeoTaggingTrail);
+ d->start();
+}
+
+/*!
+* Slot to stop location trail.
+*/
+void CxeGeoTaggingTrail::stop()
+{
+ Q_D(CxeGeoTaggingTrail);
+ d->stop();
+}
+
+
+
+/*!
+* Returns current state of Geo-tagging trail.
+*/
+CxeGeoTaggingTrail::State CxeGeoTaggingTrail::state()
+{
+ Q_D(CxeGeoTaggingTrail);
+ return d->state();
+}
+
+// end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/src/cxegeotaggingtrailprivate.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,332 @@
+/*
+* Copyright (c) 2009-2010 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 <QObject> // For Q_OS_SYMBIAN define
+#if defined(Q_OS_SYMBIAN)
+#include <locationtrailpskeys.h>
+#endif
+
+#include "cxutils.h"
+#include "cxestate.h"
+#include "cxesettings.h"
+#include "cxenamespace.h"
+#include "cxestillcapturecontrol.h"
+#include "cxevideocapturecontrol.h"
+#include "cxegeotaggingtrailprivate.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cxegeotaggingtrailprivateTraces.h"
+#endif
+
+
+namespace
+{
+ // in milliseconds
+ const int STOP_TRAIL_INTERVAL = 10*1000;
+}
+
+
+/*!
+* Constructor
+*/
+CxeGeoTaggingTrailPrivate::CxeGeoTaggingTrailPrivate(CxeStillCaptureControl &stillControl,
+ CxeVideoCaptureControl &videoControl,
+ CxeSettings &settings)
+ : CxeStateMachine("CxeGeoTaggingTrailPrivate"),
+ mStillCaptureControl(stillControl),
+ mVideoCaptureControl(videoControl),
+ mSettings(settings),
+ mStopLocationTrailTimer(),
+ mPendingStopTrailSession(false)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ qRegisterMetaType<CxeGeoTaggingTrail::State>();
+ initializeStates();
+
+#if defined(Q_OS_SYMBIAN)
+
+ QVariant locationTrailState;
+ // Get initial location trail state.
+ mSettings.get(KPSUidLocationTrail.iUid, KLocationTrailState,
+ Cxe::PublishAndSubscribe, locationTrailState);
+
+ connect(&mSettings, SIGNAL(settingValueChanged(long int, unsigned long int, QVariant)),
+ this, SLOT(handleGeoTaggingPropertyEvent(long int, unsigned long int, QVariant)));
+
+#endif
+
+ connect(&mSettings, SIGNAL(settingValueChanged(const QString&,QVariant)),
+ this, SLOT(handleSettingValueChanged(const QString&,QVariant)));
+
+ connect(&mStopLocationTrailTimer, SIGNAL(timeout()),
+ this, SLOT(timeout()), Qt::UniqueConnection);
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Destructor
+*/
+CxeGeoTaggingTrailPrivate::~CxeGeoTaggingTrailPrivate()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ // stop trail and close location utility session
+ stop(true);
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+/*!
+* Start location trail.
+*/
+void CxeGeoTaggingTrailPrivate::start()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXEGEOTAGGINGTRAIL_START_1, "msg: e_CX_START_GEOTAGGING 1");
+
+#if defined(Q_OS_SYMBIAN)
+
+ int err = KErrNone;
+ int settingValue = Cxe::GeoTaggingOff;
+ mSettings.get(CxeSettingIds::GEOTAGGING, settingValue);
+
+ if (settingValue == Cxe::GeoTaggingOn) {
+ // geotagging setting is ON, trying to start location trail
+ if (state() == CxeGeoTaggingTrail::NotConnected) {
+ err = mLocationTrail.Connect();
+ if (!err) {
+ CX_DEBUG(("CxeGeoTaggingTrail <> location trail connected"));
+ setState(CxeGeoTaggingTrail::Connected);
+ }
+ }
+
+ if (state() == CxeGeoTaggingTrail::Connected && !err) {
+ err = mLocationTrail.StartLocationTrail(RLocationTrail::ECaptureAll);
+ if (!err) {
+ CX_DEBUG(("CxeGeoTaggingTrail <> starting location trail"));
+ mStopLocationTrailTimer.stop(); // stop location timer.
+ setState(CxeGeoTaggingTrail::TrailStarted);
+ }
+ }
+
+ if (err) {
+ CX_DEBUG(("CxeGeoTaggingTrailPrivate::start <> FAILED: error = %d ", err));
+ stop(true);
+ }
+ } else {
+ // geotagging setting off, do nothing.
+ CX_DEBUG(("CxeGeoTaggingTrail <> start -- Geotagging setting OFF, do nothing.."));
+ }
+
+#endif
+ OstTrace0(camerax_performance, CXEGEOTAGGINGTRAIL_START_2, "msg: e_CX_START_GEOTAGGING 0");
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+
+
+/*!
+* Stop location trail.
+* @ param closeSession, indicates if we are willing to close the location utility session.
+*/
+void CxeGeoTaggingTrailPrivate::stop(bool closeSession)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXEGEOTAGGINGTRAIL_STOP_1, "msg: e_CX_STOP_GEOTAGGING 1");
+
+#if defined(Q_OS_SYMBIAN)
+
+ bool ok2StopTrail = canStopTrail();
+
+ if (ok2StopTrail) {
+
+ if (state() == CxeGeoTaggingTrail::TrailStarted ||
+ state() == CxeGeoTaggingTrail::DataAvailable) {
+ CX_DEBUG(("CxeGeoTaggingTrailPrivate::StopLocationTrail"));
+ // stop location trail timer.
+ mStopLocationTrailTimer.stop();
+ mLocationTrail.StopLocationTrail();
+ setState(CxeGeoTaggingTrail::Connected);
+ }
+
+ if (closeSession && state() == CxeGeoTaggingTrail::Connected) {
+ CX_DEBUG(("CxeGeoTaggingTrailPrivate <> disconnect location trail utility"));
+ mLocationTrail.Close();
+ setState(CxeGeoTaggingTrail::NotConnected);
+ }
+ } else {
+ // not ready to stop the location trail, TrailStarted the timer.
+ if (!mPendingStopTrailSession) {
+ mPendingStopTrailSession = closeSession;
+ }
+ mStopLocationTrailTimer.start(STOP_TRAIL_INTERVAL);
+ }
+
+#endif
+
+ OstTrace0(camerax_performance, CXEGEOTAGGINGTRAIL_STOP_2, "msg: e_CX_STOP_GEOTAGGING 0");
+}
+
+
+
+/*!
+* Checking possible stillcapturecontrol/videocapturecontrol states for stopping
+* location trail.
+*/
+bool CxeGeoTaggingTrailPrivate::canStopTrail() const
+{
+ // checking still capture control states
+ bool ok = mStillCaptureControl.state() != CxeStillCaptureControl::Capturing;
+
+ // Still side OK, checking video capture control states
+ if (ok) {
+ ok = (mVideoCaptureControl.state() != CxeVideoCaptureControl::Recording &&
+ mVideoCaptureControl.state() != CxeVideoCaptureControl::Paused &&
+ mVideoCaptureControl.state() != CxeVideoCaptureControl::Stopping);
+ }
+
+ return ok;
+}
+
+
+
+/*!
+* Slot that is called when timer timeout signal is triggered. We track this to do pending
+* stopping of location trail.
+*/
+void CxeGeoTaggingTrailPrivate::timeout()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ // stop the pending location trail utility
+ stop(mPendingStopTrailSession);
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+
+
+/*!
+* Handle new setting value.
+* Check if the geotagging setting has changed.
+*/
+void CxeGeoTaggingTrailPrivate::handleSettingValueChanged(const QString& settingId, QVariant newValue)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (settingId == CxeSettingIds::GEOTAGGING) {
+ if (newValue.toInt() == Cxe::GeoTaggingOn) {
+ // setting is turned ON, start location trail
+ start();
+ } else {
+ // setting is turned OFF, stopping location trail
+ stop();
+ }
+ } else if (settingId == CxeSettingIds::GEOTAGGING_DISCLAIMER) {
+ if (newValue.toInt() == Cxe::GeoTaggingDisclaimerDisabled) {
+ // geotagging disclaimer is diabled, we can start location trail.
+ start();
+ }
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+/*!
+* Handle new setting value.
+* Check if the geotagging setting has changed.
+*/
+void CxeGeoTaggingTrailPrivate::handleGeoTaggingPropertyEvent(long int uid,
+ unsigned long int key,
+ QVariant value)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+#if defined(Q_OS_SYMBIAN)
+
+ if (uid == KPSUidLocationTrail.iUid && key == KLocationTrailState) {
+ CX_DEBUG(("Location trail: new state = %d ", value.toInt()));
+
+ RLocationTrail::TTrailState newState =
+ static_cast<RLocationTrail::TTrailState>(value.toInt());
+
+ if (newState == RLocationTrail::ETrailStarted) {
+ CX_DEBUG(("CxeGeoTaggingTrail <> location trail started, data available."));
+ setState(CxeGeoTaggingTrail::DataAvailable);
+ } else {
+ // ignoring all other state changes.
+ }
+ }
+
+#endif
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+
+/*!
+Returns current state of Location trail
+*/
+CxeGeoTaggingTrail::State CxeGeoTaggingTrailPrivate::state() const
+{
+ return static_cast<CxeGeoTaggingTrail::State> (stateId());
+}
+
+
+
+/*!
+* slot called when state is changed.
+*/
+void CxeGeoTaggingTrailPrivate::handleStateChanged(int newStateId, CxeError::Id error)
+{
+ emit stateChanged(static_cast<CxeGeoTaggingTrail::State> (newStateId), error);
+
+}
+
+
+/*!
+* Initialize states for geotaggingtrail
+*/
+void CxeGeoTaggingTrailPrivate::initializeStates()
+{
+ // addState( id, name, allowed next states )
+ addState(new CxeState(CxeGeoTaggingTrail::NotConnected, "NotConnected", CxeGeoTaggingTrail::Connected));
+
+ addState(new CxeState(CxeGeoTaggingTrail::Connected, "Connected", CxeGeoTaggingTrail::TrailStarted |
+ CxeGeoTaggingTrail::NotConnected));
+
+ addState(new CxeState(CxeGeoTaggingTrail::TrailStarted, "TrailStarted", CxeGeoTaggingTrail::DataAvailable |
+ CxeGeoTaggingTrail::Connected |
+ CxeGeoTaggingTrail::NotConnected));
+
+ addState(new CxeState(CxeGeoTaggingTrail::DataAvailable, "DataAvailable", CxeGeoTaggingTrail::Connected |
+ CxeGeoTaggingTrail::NotConnected));
+
+
+ setInitialState(CxeGeoTaggingTrail::NotConnected);
+}
+
+// end of file
--- a/camerauis/cameraxui/cxengine/src/cxeimagedataitemsymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxeimagedataitemsymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -31,11 +31,13 @@
CxeImageDataItemSymbian::CxeImageDataItemSymbian(QByteArray data,
QString filename,
int id,
+ bool addLocation,
CxeImageDataItem::State state)
: CxeStateMachine("CxeImageDataItemSymbian"),
mError(KErrNone),
mId(id),
mData(data),
+ mAddLocationInfo(addLocation),
mPath(filename)
{
CX_DEBUG_ENTER_FUNCTION();
@@ -165,6 +167,7 @@
CxeError::Id CxeImageDataItemSymbian::save()
{
CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXEIMAGEDATAITEMSYMBIAN_SAVE_IN, "msg: e_CX_IMAGEDATAITEM_SAVE 1");
mError = KErrNone;
@@ -225,7 +228,7 @@
mFile.Close(); //~400us
mFs.Close(); //~450us
- OstTrace0(camerax_performance, CXEIMAGEDATAIMTEMSYMBIAN_SAVED, "msg: e_CX_SHOT_TO_SAVE 0");
+ OstTrace0(camerax_performance, CXEIMAGEDATAITEMSYMBIAN_SAVED, "msg: e_CX_SHOT_TO_SAVE 0");
if (mError == KErrNone) {
setState(CxeImageDataItem::Saved);
@@ -234,7 +237,7 @@
}
emit imageSaved(CxeErrorHandlingSymbian::map(mError), mPath, mId);
- CX_DEBUG(("mError: %d", mError));
+ OstTrace0(camerax_performance, CXEIMAGEDATAITEMSYMBIAN_SAVE_OUT, "msg: e_CX_IMAGEDATAITEM_SAVE 0");
CX_DEBUG_EXIT_FUNCTION();
return CxeErrorHandlingSymbian::map(mError);
}
@@ -327,6 +330,12 @@
emit stateChanged(static_cast<State> (newStateId), error);
}
+
+bool CxeImageDataItemSymbian::isLocationEnabled() const
+{
+ return mAddLocationInfo;
+}
+
void CxeImageDataItemSymbian::initializeStates()
{
// addState( id, name, allowed next states )
--- a/camerauis/cameraxui/cxengine/src/cxeimagedataqueuesymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxeimagedataqueuesymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -80,12 +80,12 @@
return *mList[index];
}
-CxeImageDataItemSymbian *CxeImageDataQueueSymbian::startSave( QByteArray data, QString path, int id )
+CxeImageDataItemSymbian *CxeImageDataQueueSymbian::startSave(QByteArray data, QString path, int id, bool addLocation)
{
CX_DEBUG_ENTER_FUNCTION();
- CxeImageDataItemSymbian* dataItem = new CxeImageDataItemSymbian(data, path, id);
- mList.append( dataItem );
+ CxeImageDataItemSymbian* dataItem = new CxeImageDataItemSymbian(data, path, id, addLocation);
+ mList.append(dataItem);
CX_DEBUG_EXIT_FUNCTION();
return dataItem;
--- a/camerauis/cameraxui/cxengine/src/cxequalitypresetssymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxequalitypresetssymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -17,6 +17,7 @@
*
*/
+#include <algorithm>
#include <e32std.h> // For Symbian types used in mmsenginedomaincrkeys.h
#include <MmsEngineDomainCRKeys.h>
@@ -35,15 +36,24 @@
namespace
{
// Display IDs for cameras, used when requesting data from ICM
- const int PRIMARY_CAMERA_DISPLAY_ID = 2;
- const int SECONDARY_CAMERA_DISPLAY_ID = 3;
+ const int PRIMARY_CAMERA_DISPLAY_ID = 2;
+ const int SECONDARY_CAMERA_DISPLAY_ID = 3;
- const int ONE_MILLION = 1000000;
- const qreal ASPECT_16_BY_9 = (16/9.0);
- const qreal DELTA_ERROR = 0.20;
+ const int ONE_MILLION = 1000000;
+
+ const QSize ASPECT_RATIO_SIZE_4BY3 = QSize(4,3);
+ const QSize ASPECT_RATIO_SIZE_16BY9 = QSize(16, 9);
+ const QSize ASPECT_RATIO_SIZE_11BY9 = QSize(11, 9);
// ICM "camcorderVisible" parameter value below this means sharing aka mms quality.
- const int MMS_QUALITY_CAMCORDERVISIBLE_LIMIT = 200;
+ const int MMS_QUALITY_CAMCORDERVISIBLE_LIMIT = 200;
+
+ // Average video bit rate scaler
+ const qreal VIDEO_AVG_BITRATE_SCALER = 0.9;
+ // Coefficient to estimate video metadata amount
+ const qreal VIDEO_METADATA_COEFF = 1.03;
+ // Maximum video clip duration in seconds for all qualities
+ const qint64 VIDEO_MAX_DURATION = 5400;
}
@@ -54,6 +64,7 @@
: mSettings(settings)
{
CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXEQUALITYPRESETSSYMBIAN_1, "msg: e_CX_QUALITYPRESETS_NEW 1");
TRAPD(err, mIcm = CImagingConfigManager::NewL());
@@ -62,8 +73,8 @@
mIcm = NULL;
}
+ OstTrace0(camerax_performance, CXEQUALITYPRESETSSYMBIAN_2, "msg: e_CX_QUALITYPRESETS_NEW 0");
CX_DEBUG_EXIT_FUNCTION();
-
}
/* !
@@ -98,7 +109,7 @@
int totalLevels = mIcm->NumberOfImageQualityLevels();
CX_DEBUG(("Total image quality levels = %d", totalLevels));
- CArrayFixFlat<TUint>* levels= new CArrayFixFlat<TUint>(totalLevels);
+ CArrayFixFlat<TUint>* levels = new CArrayFixFlat<TUint>(totalLevels);
// Get camera display id based on camera index
int displayId = cameraId == Cxe::SecondaryCameraIndex
@@ -235,6 +246,7 @@
*/
CxeVideoDetails CxeQualityPresetsSymbian::createVideoPreset(TVideoQualitySet set)
{
+ CX_DEBUG_ENTER_FUNCTION();
CxeVideoDetails newPreset;
// set setting values from quality set
newPreset.mWidth = set.iVideoWidth;
@@ -272,6 +284,7 @@
// set audiotype
newPreset.mAudioType = toString(fourCCBuf);
+ CX_DEBUG_EXIT_FUNCTION();
return newPreset;
}
@@ -295,14 +308,20 @@
{
Cxe::AspectRatio aspectRatio = Cxe::AspectRatio4to3;
- qreal ratio = 0;
- if (height != 0) {
- ratio = (1.0 * width) / height;
+ // calculate delta error for the resolution against supported aspect ratio's
+ int delta16by9 = abs((width * ASPECT_RATIO_SIZE_16BY9.height()) - (height * ASPECT_RATIO_SIZE_16BY9.width()));
+ int delta11by9 = abs((width * ASPECT_RATIO_SIZE_11BY9.height()) - (height * ASPECT_RATIO_SIZE_11BY9.width()));
+ int delta4by3 = abs((width * ASPECT_RATIO_SIZE_4BY3.height()) - (height * ASPECT_RATIO_SIZE_4BY3.width()));
- qreal delta16by9 = ratio - ASPECT_16_BY_9;
- if (abs(delta16by9) < DELTA_ERROR) {
- aspectRatio = Cxe::AspectRatio16to9;
- }
+ // get the closest aspect ratio
+ int minValue = qMin(qMin(delta16by9, delta11by9), delta4by3);
+
+ if (minValue == delta16by9) {
+ aspectRatio = Cxe::AspectRatio16to9;
+ } else if (minValue == delta11by9) {
+ aspectRatio = Cxe::AspectRatio11to9;
+ } else if (minValue == delta4by3) {
+ aspectRatio = Cxe::AspectRatio4to3;
}
return aspectRatio;
@@ -341,6 +360,48 @@
}
+/*!
+* Get the available recording time with given video quality details and disk space.
+* @param details Video quality details to use in calculation.
+* @param space Available disk space to use in calculation.
+* @return Available recording time estimate in seconds.
+*/
+int CxeQualityPresetsSymbian::recordingTimeAvailable(const CxeVideoDetails& details, qint64 space)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ int time(0);
+
+ // Maximum clip size may be limited for mms quality.
+ // If mMaximumSizeInBytes == 0, no limit is specified.
+ if (details.mMaximumSizeInBytes > 0 && details.mMaximumSizeInBytes < space) {
+ space = details.mMaximumSizeInBytes;
+ }
+
+ // Use average audio/video bitrates to estimate remaining time
+ qreal scaler(avgVideoBitRateScaler());
+ if (scaler == 0) {
+ // video bit rate scaler is 0, use the constant value
+ scaler = VIDEO_AVG_BITRATE_SCALER;
+ }
+
+ int muteSetting = 0; // audio enabled
+ mSettings.get(CxeSettingIds::VIDEO_MUTE_SETTING, muteSetting);
+
+ int avgVideoBitRate = (details.mVideoBitRate * scaler);
+ int avgAudioBitRate = (muteSetting == 1) ? 0 : details.mAudioBitRate;
+
+ quint32 averageBitRate = (quint32)((avgVideoBitRate + avgAudioBitRate) * VIDEO_METADATA_COEFF);
+ quint32 averageByteRate = averageBitRate / 8;
+
+ // 0 <= Remaining time <= KCamCMaxClipDurationInSecs
+ qint64 remaining = std::max(qint64(0), space/averageByteRate);
+ time = std::min(remaining, VIDEO_MAX_DURATION);
+
+ CX_DEBUG(( "remaining time from algorithm: %d", time ));
+ CX_DEBUG_EXIT_FUNCTION();
+ return time;
+}
+
/*!
Operator to sort values in ascending order.
--- a/camerauis/cameraxui/cxengine/src/cxesettingscenrepstore.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxesettingscenrepstore.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -25,6 +25,9 @@
#include <QString>
#include <QStringList>
#include <QVariant>
+#ifdef Q_OS_SYMBIAN
+#include <ProfileEngineSDKCRKeys.h>
+#endif
#include "xqsettingsmanager.h" // Settings Manager API
#include "xqsettingskey.h"
@@ -35,15 +38,22 @@
#include "cxeerror.h"
#include "cxecenrepkeys.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cxesettingscenrepstoreTraces.h"
+#endif
+
+
using namespace CxeSettingIds;
-/*
+/*!
* CxeSettingsCenRepStore::CxeSettingsCenRepStore
*/
CxeSettingsCenRepStore::CxeSettingsCenRepStore()
{
CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXESETTINGSCENREPSTORE_1, "msg: e_CX_SETTINGSSTORE_CREATE 1");
// map keys of type "string" to cenrep ids
mapKeys();
@@ -51,13 +61,13 @@
// we create settings handle, scope user::scope
mSettingsManager = new XQSettingsManager(this);
- bool ok = false;
- ok = connect(mSettingsManager, SIGNAL(valueChanged(XQSettingsKey, QVariant)),
- this, SLOT(handleValueChanged(XQSettingsKey, QVariant)));
- CX_DEBUG_ASSERT(ok);
+ bool ok = connect(mSettingsManager, SIGNAL(valueChanged(XQSettingsKey, QVariant)),
+ this, SLOT(handleValueChanged(XQSettingsKey, QVariant)));
+ CX_ASSERT_ALWAYS(ok);
CX_DEBUG(("CxeSettingsCenRepStore - mSettingsManager ptr = %d", mSettingsManager));
+ OstTrace0(camerax_performance, CXESETTINGSCENREPSTORE_2, "msg: e_CX_SETTINGSSTORE_CREATE 0");
CX_DEBUG_EXIT_FUNCTION();
}
@@ -74,8 +84,10 @@
}
-/*
+/*!
* Generates XQSettingsKey from given setting/runtime key
+* \param key Name of the setting from which to generate the XQSettingsKey
+* \param[out] error Error code. CxeError::None if everything went fine.
*/
XQSettingsKey
CxeSettingsCenRepStore::generateXQSettingsKey(const QString& key, CxeError::Id& error)
@@ -103,7 +115,7 @@
-/*
+/*!
* Reads/loads all run-time settings values from cenrep
* @param QList<QString> contains list of all runtime key ids which we use to load values from cenrep.
* returns: QHash container, "contains" values associated with each key that are read from cenrep
@@ -112,6 +124,7 @@
QHash<QString, QVariantList> CxeSettingsCenRepStore::loadRuntimeSettings(QList<QString>& runtimeKeys)
{
CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXESETTINGSCENREPSTORE_LOADRUNTIME_1, "msg: e_CX_SETTINGSSTORE_LOAD_RUNTIME 1");
QHash<QString, QVariantList> settings;
CxeError::Id err = CxeError::None;
@@ -145,12 +158,13 @@
CX_DEBUG_EXIT_FUNCTION();
+ OstTrace0(camerax_performance, CXESETTINGSCENREPSTORE_LOADRUNTIME_2, "msg: e_CX_SETTINGSSTORE_LOAD_RUNTIME 0");
return settings;
}
-/*
+/*!
* Reads a value from cenrep
* @param key - setting key
* @param value - setting value read from cenrep
@@ -183,15 +197,16 @@
-/*
-* Reads a value from cenrep
+/*!
+* Reads a value from cenrep and starts the value change monitoring.
* @param key - setting key
* @param uid - setting UID of the component that owns the setting key
-* @param type - the type of key cr key or P&S key (constantly monitoring value)
+* @param type - the type of key cr key or P&S key
* @param value - setting value read from cenrep
+*
+* @sa handleValueChanged()
*/
-
-void CxeSettingsCenRepStore::get(long int uid,
+void CxeSettingsCenRepStore::startMonitoring(long int uid,
unsigned long int key,
Cxe::SettingKeyType type,
QVariant &value)
@@ -208,21 +223,27 @@
}
XQSettingsKey settingsKey(keyType, uid, key);
- CX_DEBUG(("reading values from XQSettingsManager.."));
+ CX_DEBUG(("reading value from XQSettingsManager.."));
value = mSettingsManager->readItemValue(settingsKey);
- if (keyType == XQSettingsKey::TargetPublishAndSubscribe) {
- bool ok = false;
- ok = mSettingsManager->startMonitoring(settingsKey);
- CX_DEBUG_ASSERT(ok);
+ // start monitoring changes for the key
+ // both P&S and Repository keys are monitored
+ bool ok = mSettingsManager->startMonitoring(settingsKey);
+ if (!ok) {
+ XQSettingsManager::Error error = mSettingsManager->error();
+ CX_DEBUG(("CxeSettingsCenRepStore - got error %d trying to start listening", error));
+ // If we try to start listening one key more than once,
+ // we get this error. We can safely ignore it.
+ ok = (XQSettingsManager::AlreadyExistsError == error);
}
+ CX_ASSERT_ALWAYS(ok);
CX_DEBUG_EXIT_FUNCTION();
}
-/*
+/*!
* Sets a new value to cenrep
* @param key - setting key
* @param newValue - new value set to the key in cenrep
@@ -258,7 +279,7 @@
-/*
+/*!
* resets the cenrep store
*/
void CxeSettingsCenRepStore::reset()
@@ -270,12 +291,14 @@
}
-/*
-* adds key mapping to all settings
+/*!
+* Maps CxeSettingIds to cenrep key ids that XQSettingsManager understands
*/
void CxeSettingsCenRepStore::mapKeys()
{
CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXESETTINGSCENREPSTORE_MAPKEYS_1, "msg: e_CX_SETTINGSSTORE_INIT_MAPPING 1");
+
mKeyMapping.clear();
// mapping setting keys
@@ -315,6 +338,38 @@
AudioMuteCr,
XQSettingsManager::TypeInt);
+ addKeyMapping(CxeSettingIds::GEOTAGGING,
+ GeoTaggingCr,
+ XQSettingsManager::TypeInt);
+
+ addKeyMapping(CxeSettingIds::FACE_TRACKING,
+ FacetrackingCr,
+ XQSettingsManager::TypeInt);
+
+ addKeyMapping(CxeSettingIds::IMAGE_SCENE,
+ SceneModeStillCr,
+ XQSettingsManager::TypeString);
+
+ addKeyMapping(CxeSettingIds::VIDEO_SCENE,
+ SceneModeVideoCr,
+ XQSettingsManager::TypeString);
+
+ addKeyMapping(CxeSettingIds::FLASH_MODE,
+ FlashModeStillCr,
+ XQSettingsManager::TypeInt);
+
+ addKeyMapping(CxeSettingIds::CAPTURE_SOUND_ALWAYS_ON,
+ CaptureSoundAlwaysOnCr,
+ XQSettingsManager::TypeInt);
+
+ addKeyMapping(CxeSettingIds::CAMERA_MODE,
+ CameraModeCr,
+ XQSettingsManager::TypeInt);
+
+ addKeyMapping(CxeSettingIds::GEOTAGGING_DISCLAIMER,
+ GeoTaggingDisclaimerCr,
+ XQSettingsManager::TypeInt);
+
// mapping run-time keys
addKeyMapping(CxeRuntimeKeys::PRIMARY_CAMERA_CAPTURE_KEYS,
PrimaryCameraCaptureKeysCr,
@@ -346,11 +401,12 @@
XQSettingsManager::TypeString,
true);
+ OstTrace0(camerax_performance, CXESETTINGSCENREPSTORE_MAPKEYS_2, "msg: e_CX_SETTINGSSTORE_INIT_MAPPING 0");
CX_DEBUG_EXIT_FUNCTION();
}
-/*
-* helper class to construct key mappings for each setting key
+/*!
+* helper method to construct key mappings for each setting key
*/
void CxeSettingsCenRepStore::addKeyMapping(QString key,
unsigned long int keyid,
@@ -381,14 +437,14 @@
/*!
-* Slot that handles value changed signal for Publish & Subscribe key.
+* Handles value changed signal from the XQSettingsManager.
+* Emits signals corresponding the changed setting.
+* \sa warningTonesChanged(), settingValueChanged()
*/
void CxeSettingsCenRepStore::handleValueChanged(XQSettingsKey key, QVariant value)
{
CX_DEBUG_ENTER_FUNCTION();
-
emit settingValueChanged(key.uid(), key.key(), value);
-
CX_DEBUG_EXIT_FUNCTION();
}
--- a/camerauis/cameraxui/cxengine/src/cxesettingscontrolsymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxesettingscontrolsymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -19,6 +19,7 @@
#include <ecamadvsettings.h>
#include <ecamimageprocessing.h>
#include <ecam/ecamconstants.h>
+#include <ecamfacetrackingcustomapi.h>
#include <QString>
#include <QVariant>
@@ -30,6 +31,12 @@
#include "cxesettingsmappersymbian.h"
#include "cxesettingscontrolsymbian.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cxesettingscontrolsymbianTraces.h"
+#endif
+
+
/*!
* Constructor
*/
@@ -59,6 +66,8 @@
/*!
* Handle new setting value.
* New value is set to camera.
+* \param settingId The id of the updated setting
+* \param newValue A new value for the updated setting
*/
void CxeSettingsControlSymbian::handleSettingValueChanged(const QString& settingId, QVariant newValue)
{
@@ -79,6 +88,8 @@
updateExposureModeSetting(newValue);
} else if (settingId == CxeSettingIds::EV_COMPENSATION_VALUE) {
updateExposureCompensationSetting(newValue);
+ } else if (settingId == CxeSettingIds::FACE_TRACKING) {
+ updateFaceTrackingSetting(newValue);
} else {
// do nothing
}
@@ -93,23 +104,27 @@
/*!
* Handle new scene being set.
* Scene settings are checked and new values are set to camera.
-* @param scene New scene containing scene specific settings.
+* \param scene New scene containing scene specific settings.
*/
void CxeSettingsControlSymbian::handleSceneChanged(CxeScene& scene)
{
CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXESETTINGSCONTROL_SCENE_1, "msg: e_CX_SCENE_SETTINGS_TO_CAMERA 1");
+
CX_DEBUG(("CxeSettingsControlSymbian <> new scene [%s]",
scene[CxeSettingIds::SCENE_ID].value<QString>().toAscii().constData()));
foreach (const QString& settingId, scene.keys()) {
handleSettingValueChanged(settingId, scene[settingId]);
}
+
+ OstTrace0(camerax_performance, CXESETTINGSCONTROL_SCENE_2, "msg: e_CX_SCENE_SETTINGS_TO_CAMERA 0");
CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
-*
+* Update color tone setting value to the camera device
+* \param newValue A new value for the updated setting
*/
void CxeSettingsControlSymbian::updateColorToneSetting(QVariant newValue)
{
@@ -136,7 +151,8 @@
}
/*!
-*
+* Update white balance setting value to the camera device
+* \param newValue A new value for the updated setting
*/
void CxeSettingsControlSymbian::updateWhiteBalanceSetting(QVariant newValue)
{
@@ -155,7 +171,8 @@
}
/*!
-*
+* Update light sensitivity (ISO) setting value to the camera device
+* \param newValue A new value for the updated setting
*/
void CxeSettingsControlSymbian::updateLightSensitivitySetting(QVariant newValue)
{
@@ -180,7 +197,8 @@
}
/*!
-*
+* Update sharpness setting value to the camera device
+* \param newValue A new value for the updated setting
*/
void CxeSettingsControlSymbian::updateSharpnessSetting(QVariant newValue)
{
@@ -210,7 +228,8 @@
}
/*!
-*
+* Update contrast setting value to the camera device
+* \param newValue A new value for the updated setting
*/
void CxeSettingsControlSymbian::updateContrastSetting(QVariant newValue)
{
@@ -233,7 +252,8 @@
}
/*!
-*
+* Update brightness setting value to the camera device
+* \param newValue A new value for the updated setting
*/
void CxeSettingsControlSymbian::updateBrightnessSetting(QVariant newValue)
{
@@ -256,7 +276,8 @@
}
/*!
-*
+* Update Exposure mode to the camera device
+* \param newValue A new value for the updated setting
*/
void CxeSettingsControlSymbian::updateExposureModeSetting(QVariant newValue)
{
@@ -275,7 +296,8 @@
}
/*!
-*
+* Update Exposure Compensation mode to the camera device
+* \param newValue A new value for the updated setting
*/
void CxeSettingsControlSymbian::updateExposureCompensationSetting(QVariant newValue)
{
@@ -297,7 +319,8 @@
}
/*!
-*
+* Update flash mode to the camera device
+* \param newValue A new value for the updated setting
*/
void CxeSettingsControlSymbian::updateFlashSetting(QVariant newValue)
{
@@ -315,4 +338,18 @@
CX_DEBUG_EXIT_FUNCTION();
}
+/*!
+* Update face tracking mode to the camera device
+* \param newValue A new value for the updated setting
+*/
+void CxeSettingsControlSymbian::updateFaceTrackingSetting(QVariant newValue)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ MCameraFaceTracking *faceTracking = mCameraDevice.faceTracking();
+ if(faceTracking) {
+ TRAP_IGNORE(faceTracking->SetFaceTrackingL(newValue.toInt()));
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
// end of file
--- a/camerauis/cameraxui/cxengine/src/cxesettingsimp.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxesettingsimp.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -69,7 +69,7 @@
/*!
Return the current integer setting value for the given key
*/
-CxeError::Id CxeSettingsImp::get(const QString& key, int& value) const
+CxeError::Id CxeSettingsImp::get(const QString &key, int &value) const
{
CX_DEBUG_ENTER_FUNCTION();
@@ -124,7 +124,7 @@
Return the current string setting value for the given key
*/
CxeError::Id CxeSettingsImp::get(
- const QString& key, QString &stringValue) const
+ const QString &key, QString &stringValue) const
{
CX_DEBUG_ENTER_FUNCTION();
@@ -173,7 +173,7 @@
Get the current scene mode setting value for the given key
*/
CxeError::Id CxeSettingsImp::getSceneMode(
- const QString& key, QString &stringValue) const
+ const QString &key, QString &stringValue) const
{
CX_DEBUG_ENTER_FUNCTION();
@@ -204,19 +204,21 @@
/*!
Set new int value for the given key
*/
-CxeError::Id CxeSettingsImp::set(const QString& key,int newValue)
+CxeError::Id CxeSettingsImp::set(const QString &key, int newValue)
{
CX_DEBUG_ENTER_FUNCTION();
CX_DEBUG(("CxeSettingsImp::set - key: %s value: %d",
key.toAscii().data(), newValue));
- CxeError::Id err = mSettingsModel.set(key, newValue);
- emit settingValueChanged(key, newValue);
+ CxeError::Id error = mSettingsModel.set(key, newValue);
+ if (error == CxeError::None) {
+ emit settingValueChanged(key, newValue);
+ }
CX_DEBUG_EXIT_FUNCTION();
- return err;
+ return error;
}
@@ -224,35 +226,38 @@
/*!
Set new int value for the given key
*/
-CxeError::Id CxeSettingsImp::set(const QString& key,qreal newValue)
+CxeError::Id CxeSettingsImp::set(const QString &key, qreal newValue)
{
CX_DEBUG_ENTER_FUNCTION();
CX_DEBUG(("CxeSettingsImp::set - key: %s value: %f",
key.toAscii().data(), newValue));
- CxeError::Id err = mSettingsModel.set(key, newValue);
- emit settingValueChanged(key, newValue);
+ CxeError::Id error = mSettingsModel.set(key, newValue);
+
+ if (error == CxeError::None) {
+ emit settingValueChanged(key, newValue);
+ }
CX_DEBUG_EXIT_FUNCTION();
- return err;
+ return error;
}
/*!
Set new string value for the given key
*/
-CxeError::Id CxeSettingsImp::set(const QString& key,const QString& newValue)
+CxeError::Id CxeSettingsImp::set(const QString &key, const QString &newValue)
{
CX_DEBUG_ENTER_FUNCTION();
CX_DEBUG(("CxeSettingsImp::set - key: %s value: %s",
key.toAscii().data(), newValue.toAscii().data()));
- CxeError::Id err = setSceneMode(key, newValue);
+ CxeError::Id error = setSceneMode(key, newValue);
- if (err == CxeError::NotFound) {
+ if (error == CxeError::NotFound) {
// not scene mode setting, try setting value to settings store
mSettingsModel.set(key, newValue);
emit settingValueChanged(key, newValue);
@@ -260,7 +265,7 @@
CX_DEBUG_EXIT_FUNCTION();
- return err;
+ return error;
}
@@ -269,34 +274,34 @@
Set the current scene mode setting value for the given key
*/
CxeError::Id CxeSettingsImp::setSceneMode(
- const QString& key,const QString& newValue)
+ const QString &key,const QString &newValue)
{
CX_DEBUG_ENTER_FUNCTION();
CX_DEBUG(("CxeSettingsImp::set - key: %s value: %s",
key.toAscii().data(), newValue.toAscii().data()));
- CxeError::Id err = CxeError::None;
+ CxeError::Id error = CxeError::None;
CxeScene scene;
if(CxeSettingIds::IMAGE_SCENE == key) {
- err = mSettingsModel.setImageScene(newValue);
+ error = mSettingsModel.setImageScene(newValue);
scene = mSettingsModel.currentImageScene();
} else if(CxeSettingIds::VIDEO_SCENE == key) {
- err = mSettingsModel.setVideoScene(newValue);
+ error = mSettingsModel.setVideoScene(newValue);
scene = mSettingsModel.currentVideoScene();
} else {
- err = CxeError::NotFound;
+ error = CxeError::NotFound;
}
- if (err == CxeError::None) {
+ if (error == CxeError::None) {
// scene mode set, inform clients about scene mode change
emit sceneChanged(scene);
}
CX_DEBUG_EXIT_FUNCTION();
- return err;
+ return error;
}
/*!
@@ -316,7 +321,7 @@
/*
* CxeSettingsImp::CxeSettingsImp
*/
-CxeSettingsImp::CxeSettingsImp(CxeSettingsModel& settingsModel)
+CxeSettingsImp::CxeSettingsImp(CxeSettingsModel &settingsModel)
: mSettingsModel(settingsModel)
{
CX_DEBUG_IN_FUNCTION();
--- a/camerauis/cameraxui/cxengine/src/cxesettingsmodelimp.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxesettingsmodelimp.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -36,7 +36,7 @@
using namespace Cxe;
-/*
+/*!
* CxeSettingsModel::CxeSettingsModel
*/
CxeSettingsModelImp::CxeSettingsModelImp(CxeSettingsStore *settingsStore)
@@ -51,28 +51,26 @@
}
-/*
+/*!
* CxeSettingsModelImp::init
*/
void CxeSettingsModelImp::init()
{
CX_DEBUG_ENTER_FUNCTION();
+ mCurrentImgScene.clear();
+ mCurrentVidScene.clear();
+
loadRuntimeSettings();
loadImageScenes();
loadVideoScenes();
- // TODO: for now the current image scene when we start camera is SceneAuto
- mCameraMode = Cxe::ImageMode;
- setImageScene(CxeSettingIds::IMAGE_SCENE_AUTO);
- setVideoScene(CxeSettingIds::VIDEO_SCENE_AUTO);
-
CX_DEBUG_EXIT_FUNCTION();
}
-/*
+/*!
* CxeSettingsModelImp::~CxeSettingsModelImp()
*/
CxeSettingsModelImp::~CxeSettingsModelImp()
@@ -94,7 +92,7 @@
-/*
+/*!
* Loads all run-time settings
*/
void CxeSettingsModelImp::loadRuntimeSettings()
@@ -112,7 +110,7 @@
}
-/*
+/*!
* Get setting value associated with the key.
* @Param key - Setting key Id ( refer to CxeSettingIds in cxenums.h )
* @Param value - contains the value associated with the key.
@@ -123,17 +121,17 @@
CX_DEBUG_ENTER_FUNCTION();
CX_DEBUG_ASSERT(mSettingStore);
- // Try first to find the item from scene settings.
- // These need to override the common setting values.
- CxeError::Id err = sceneSettingValue(key, value);
- CX_DEBUG(( "status reading from scene data: %d", err));
+ // Try first to find the item from cenrep store.
+
+ CxeError::Id err = mSettingStore->get(key, value);
- // If scene does not control this setting, read it from settings store.
- if (err == CxeError::NotFound) {
+ // If setting is not in cenrep store, try fetching it from scene settings.
+ if (err) {
// setting not found in setting store, try finding if its scene specific setting.
- CX_DEBUG(( "fetching value from settings store" ));
- err = mSettingStore->get(key, value);
+ CX_DEBUG(( "fetching value from scene settings" ));
+ err = sceneSettingValue(key, value);
}
+
CX_DEBUG_EXIT_FUNCTION();
return err;
@@ -142,7 +140,7 @@
-/*
+/*!
* Get setting value associated with the key.
* @param uid - UID of component that owns the setting key
* @Param key - key id of the setting
@@ -157,7 +155,7 @@
CX_DEBUG_ENTER_FUNCTION();
CX_DEBUG_ASSERT(mSettingStore);
- mSettingStore->get(uid, key, type, value);
+ mSettingStore->startMonitoring(uid, key, type, value);
CX_DEBUG_EXIT_FUNCTION();
}
@@ -165,7 +163,7 @@
-/*
+/*!
* Set a value to the key.
* @Param key - Setting key Id ( refer to CxeSettingIds in cxenums.h )
* @Param value - contains the value associated with the key.
@@ -176,15 +174,12 @@
CX_DEBUG_ENTER_FUNCTION();
CX_DEBUG_ASSERT(mSettingStore);
- // If this is one of scene settings,
- // store it as modification of current scene.
- CxeError::Id err = setSceneSettingValue(key, newValue);
- CX_DEBUG(( "status storing to scene data: %d", err));
+ // Try storing new value to cenrep
+ CxeError::Id err = mSettingStore->set(key, newValue);
- // If not scene specific, store the setting value.
- if (err == CxeError::NotFound) {
- CX_DEBUG(( "writing value to settings store" ));
- err = mSettingStore->set(key, newValue);
+ if (err) {
+ CX_DEBUG(( "Key not found in cenrepstore, writing value to scene settings" ));
+ err = setSceneSettingValue(key, newValue);
}
CX_DEBUG_EXIT_FUNCTION();
@@ -193,7 +188,7 @@
}
-/*
+/*!
* Reset all settings
*/
void CxeSettingsModelImp::reset()
@@ -205,7 +200,7 @@
}
-/*
+/*!
* Get the configured run-time value associated with the key.
* @Param key - Setting key Id ( refer to CxeSettingIds in cxenums.h )
* @Param value - contains the value associated with the key.
@@ -230,7 +225,7 @@
}
-/*
+/*!
* Set new Image scene mode.
* @returns CxeError::None if successful or any CxeError specific error code.
*/
@@ -238,16 +233,20 @@
{
CX_DEBUG_ENTER_FUNCTION();
- CxeError::Id err = CxeError::None;
+ // load scene specific settings
+ CxeError::Id err = loadSceneData(newScene, mCurrentImgScene);
+
+ if (!err) {
+ // saving current image scene to cenrep
+ err = set(CxeSettingIds::IMAGE_SCENE, newScene);
- // load the scene setting default values for the new scene id = "newScene"
- CxeScene sceneSettings;
- err = imageScene(newScene, sceneSettings);
+ // saving flash value from scene to cenrep
+ QString key(CxeSettingIds::FLASH_MODE);
+ err = set(key, mCurrentImgScene[key].toInt());
- // create of copy of the new scene as we use it for accessing the scene settings later.
- if (CxeError::None == err) {
- mCurrentImgScene.clear();
- loadSceneData(mCurrentImgScene, sceneSettings);
+ // saving face tracking value from scene to cenrep
+ key = CxeSettingIds::FACE_TRACKING;
+ err = set(key, mCurrentImgScene[key].toInt());
}
CX_DEBUG_EXIT_FUNCTION();
@@ -256,7 +255,7 @@
}
-/*
+/*!
* Set new video scene mode.
* @returns CxeError::None if successful or any CxeError specific error code.
*/
@@ -264,16 +263,11 @@
{
CX_DEBUG_ENTER_FUNCTION();
- CxeError::Id err = CxeError::None;
+ CxeError::Id err = loadSceneData(newScene, mCurrentVidScene);
- // load the scene setting default values for the new scene id = "newScene"
- CxeScene sceneSettings;
- err = videoScene(newScene, sceneSettings);
-
- // create of copy of the new scene as we use it for accessing the scene settings later.
- if (CxeError::None == err) {
- mCurrentVidScene.clear();
- loadSceneData(mCurrentVidScene, sceneSettings);
+ if (!err) {
+ // video scene loaded successfully, store the scene value to cenrep
+ err = set(CxeSettingIds::VIDEO_SCENE, newScene);
}
CX_DEBUG_EXIT_FUNCTION();
@@ -283,7 +277,7 @@
-/*
+/*!
* Loads Image scene settings for the given Scene ID
*/
CxeError::Id CxeSettingsModelImp::imageScene(const QString &sceneId, CxeScene &sceneSettings)
@@ -304,8 +298,10 @@
}
-/*
+/*!
* Loads Video scene settings for the given Scene ID
+* \param sceneId
+* \param sceneSettings
*/
CxeError::Id CxeSettingsModelImp::videoScene(const QString &sceneId, CxeScene &sceneSettings)
{
@@ -325,27 +321,46 @@
}
-/*
+/*!
* Creates a copy of the selected scene that we use for accessing specific scene settings.
+* \param newScene
+* \param currentSceneSettings
*/
-void CxeSettingsModelImp::loadSceneData(CxeScene ¤tScene, CxeScene &sceneDefaultSettings)
+CxeError::Id CxeSettingsModelImp::loadSceneData(const QString &newScene, CxeScene ¤tSceneSettings)
{
CX_DEBUG_ENTER_FUNCTION();
- // creating a deep copy of the scene mode selected.
+ CxeScene sceneDefaultSettings;
+ CxeError::Id err = imageScene(newScene, sceneDefaultSettings);
+
+ if (err == CxeError::NotFound) {
+ // not still scene, try in video scene.
+ err = videoScene(newScene, sceneDefaultSettings);
+ }
- CxeScene::const_iterator scene = sceneDefaultSettings.constBegin();
- while (scene != sceneDefaultSettings.constEnd()) {
- currentScene.insert(scene.key(), scene.value());
- ++scene;
- }
+ if (!err) {
+ // We have a new scene available, so we can clear the old values.
+ currentSceneSettings.clear();
+
+ // creating a deep copy of the scene mode selected.
+ CxeScene::const_iterator scene = sceneDefaultSettings.constBegin();
+ while (scene != sceneDefaultSettings.constEnd()) {
+ currentSceneSettings.insert(scene.key(), scene.value());
+ ++scene;
+ }
+ }
CX_DEBUG_EXIT_FUNCTION();
+
+ return err;
}
-/*
-* returns value associated with the key
+/*!
+* Returns scene setting value
+* \param key Settings key
+* \param[out] value Value associated with the key
+* \return Error id. CxeError::None if no errors.
*/
CxeError::Id CxeSettingsModelImp::sceneSettingValue(const QString &key, QVariant &value)
{
@@ -375,29 +390,33 @@
}
-/*
-* set scene setting value associated with the key
+/*!
+* Sets new value to settings specific to the scene.
+* @param key - setting id.
+* @param newValue - new setting value
+* @param error Error code. CxeError::None if operation has been successful.
+* @return Error id. CxeError::None if no errors.
*/
CxeError::Id CxeSettingsModelImp::setSceneSettingValue(const QString &key, QVariant newValue)
{
CX_DEBUG_ENTER_FUNCTION();
CxeError::Id err = CxeError::None;
+ CxeScene *scene(0);
- if(mCameraMode == Cxe::ImageMode) {
+ if (mCameraMode == Cxe::ImageMode) {
CX_DEBUG(( "CxeSettingsModelImp::setSceneSettingValue - Image mode Setting"));
- if(mCurrentImgScene.contains(key)) {
- mCurrentImgScene[key] = newValue;
- } else {
- err = CxeError::NotFound;
- }
+ scene = &mCurrentImgScene;
} else {
CX_DEBUG(( "CxeSettingsModelImp::setSceneSettingValue - Video mode Setting"));
- if(mCurrentVidScene.contains(key)) {
- mCurrentVidScene[key] = newValue;
- } else {
- err = CxeError::NotFound;
- }
+ scene = &mCurrentVidScene;
+ }
+
+ if (scene && scene->contains(key)) {
+ CX_DEBUG(( "CxeSettingsModelImp::setSceneSettingValue KEY found, writing value"));
+ scene->insert(key, newValue);
+ } else {
+ err = CxeError::NotFound;
}
CX_DEBUG_EXIT_FUNCTION();
@@ -406,7 +425,10 @@
}
-// appending the run-time keys to an array
+/*!
+* Appending the run-time keys to an array
+* \param[in,out] runtimeKeys QList where the supported runtimekeys will be added to
+*/
void CxeSettingsModelImp::supportedKeys(QList<QString>& runtimeKeys)
{
CX_DEBUG_ENTER_FUNCTION();
@@ -422,7 +444,7 @@
}
-/*
+/*!
* Loads all video scene modes
*/
void CxeSettingsModelImp::loadVideoScenes()
@@ -433,7 +455,7 @@
CxeScene vidSceneAuto;
- vidSceneAuto.insert(CxeSettingIds::SCENE_ID, CxeSettingIds::VIDEO_SCENE_AUTO);
+ vidSceneAuto.insert(CxeSettingIds::SCENE_ID, Cxe::VIDEO_SCENE_AUTO);
vidSceneAuto.insert(CxeSettingIds::FOCAL_RANGE, CxeAutoFocusControl::Hyperfocal);
vidSceneAuto.insert(CxeSettingIds::WHITE_BALANCE, WhitebalanceAutomatic);
vidSceneAuto.insert(CxeSettingIds::EXPOSURE_MODE, ExposureAuto);
@@ -442,12 +464,12 @@
vidSceneAuto.insert(CxeSettingIds::FRAME_RATE, 0);
vidSceneAuto.insert(CxeSettingIds::EV_COMPENSATION_VALUE, 0);
- mVideoSceneModes.insert(CxeSettingIds::VIDEO_SCENE_AUTO,vidSceneAuto);
+ mVideoSceneModes.insert(Cxe::VIDEO_SCENE_AUTO,vidSceneAuto);
CxeScene vidSceneNight;
- vidSceneNight.insert(CxeSettingIds::SCENE_ID, CxeSettingIds::VIDEO_SCENE_NIGHT);
+ vidSceneNight.insert(CxeSettingIds::SCENE_ID, Cxe::VIDEO_SCENE_NIGHT);
vidSceneNight.insert(CxeSettingIds::FOCAL_RANGE, CxeAutoFocusControl::Hyperfocal);
vidSceneNight.insert(CxeSettingIds::WHITE_BALANCE, WhitebalanceAutomatic);
vidSceneNight.insert(CxeSettingIds::EXPOSURE_MODE, ExposureNight);
@@ -456,12 +478,12 @@
vidSceneNight.insert(CxeSettingIds::FRAME_RATE, 0);
vidSceneNight.insert(CxeSettingIds::EV_COMPENSATION_VALUE, 0);
- mVideoSceneModes.insert(CxeSettingIds::VIDEO_SCENE_NIGHT, vidSceneNight);
+ mVideoSceneModes.insert(Cxe::VIDEO_SCENE_NIGHT, vidSceneNight);
CxeScene vidSceneLowLight;
- vidSceneLowLight.insert(CxeSettingIds::SCENE_ID, CxeSettingIds::VIDEO_SCENE_LOWLIGHT);
+ vidSceneLowLight.insert(CxeSettingIds::SCENE_ID, Cxe::VIDEO_SCENE_LOWLIGHT);
vidSceneLowLight.insert(CxeSettingIds::FOCAL_RANGE, CxeAutoFocusControl::Hyperfocal);
vidSceneLowLight.insert(CxeSettingIds::WHITE_BALANCE, WhitebalanceAutomatic);
vidSceneLowLight.insert(CxeSettingIds::EXPOSURE_MODE, ExposureAuto);
@@ -470,14 +492,14 @@
vidSceneLowLight.insert(CxeSettingIds::FRAME_RATE, 15); //fps
vidSceneLowLight.insert(CxeSettingIds::EV_COMPENSATION_VALUE, 0);
- mVideoSceneModes.insert(CxeSettingIds::VIDEO_SCENE_LOWLIGHT, vidSceneLowLight);
+ mVideoSceneModes.insert(Cxe::VIDEO_SCENE_LOWLIGHT, vidSceneLowLight);
CX_DEBUG_EXIT_FUNCTION();
}
-/*
+/*!
* Loads all Image Scene Modes
*/
void CxeSettingsModelImp::loadImageScenes()
@@ -488,7 +510,7 @@
CxeScene imgSceneAuto;
- imgSceneAuto.insert(CxeSettingIds::SCENE_ID, CxeSettingIds::IMAGE_SCENE_AUTO);
+ imgSceneAuto.insert(CxeSettingIds::SCENE_ID, Cxe::IMAGE_SCENE_AUTO);
imgSceneAuto.insert(CxeSettingIds::FOCAL_RANGE, CxeAutoFocusControl::Auto);
imgSceneAuto.insert(CxeSettingIds::WHITE_BALANCE, WhitebalanceAutomatic);
imgSceneAuto.insert(CxeSettingIds::EXPOSURE_MODE, ExposureAuto);
@@ -499,13 +521,14 @@
imgSceneAuto.insert(CxeSettingIds::EV_COMPENSATION_VALUE, 0);
imgSceneAuto.insert(CxeSettingIds::BRIGHTNESS, 0);
imgSceneAuto.insert(CxeSettingIds::FLASH_MODE, FlashAuto);
+ imgSceneAuto.insert(CxeSettingIds::FACE_TRACKING, 1);
- mImageSceneModes.insert(CxeSettingIds::IMAGE_SCENE_AUTO, imgSceneAuto);
+ mImageSceneModes.insert(Cxe::IMAGE_SCENE_AUTO, imgSceneAuto);
CxeScene imgSceneSports;
- imgSceneSports.insert(CxeSettingIds::SCENE_ID, CxeSettingIds::IMAGE_SCENE_SPORTS);
+ imgSceneSports.insert(CxeSettingIds::SCENE_ID, Cxe::IMAGE_SCENE_SPORTS);
imgSceneSports.insert(CxeSettingIds::FOCAL_RANGE, CxeAutoFocusControl::Hyperfocal);
imgSceneSports.insert(CxeSettingIds::WHITE_BALANCE, WhitebalanceAutomatic);
imgSceneSports.insert(CxeSettingIds::EXPOSURE_MODE, ExposureSport);
@@ -516,13 +539,14 @@
imgSceneSports.insert(CxeSettingIds::EV_COMPENSATION_VALUE, 0);
imgSceneSports.insert(CxeSettingIds::BRIGHTNESS, 0);
imgSceneSports.insert(CxeSettingIds::FLASH_MODE, FlashOff);
+ imgSceneSports.insert(CxeSettingIds::FACE_TRACKING, 0);
- mImageSceneModes.insert(CxeSettingIds::IMAGE_SCENE_SPORTS, imgSceneSports);
+ mImageSceneModes.insert(Cxe::IMAGE_SCENE_SPORTS, imgSceneSports);
CxeScene imgSceneCloseUp;
- imgSceneCloseUp.insert(CxeSettingIds::SCENE_ID, CxeSettingIds::IMAGE_SCENE_MACRO);
+ imgSceneCloseUp.insert(CxeSettingIds::SCENE_ID, Cxe::IMAGE_SCENE_MACRO);
imgSceneCloseUp.insert(CxeSettingIds::FOCAL_RANGE, CxeAutoFocusControl::Macro);
imgSceneCloseUp.insert(CxeSettingIds::WHITE_BALANCE, WhitebalanceAutomatic);
imgSceneCloseUp.insert(CxeSettingIds::EXPOSURE_MODE, ExposureAuto);
@@ -533,12 +557,13 @@
imgSceneCloseUp.insert(CxeSettingIds::EV_COMPENSATION_VALUE, 0);
imgSceneCloseUp.insert(CxeSettingIds::BRIGHTNESS, 0);
imgSceneCloseUp.insert(CxeSettingIds::FLASH_MODE, FlashAuto);
+ imgSceneCloseUp.insert(CxeSettingIds::FACE_TRACKING, 0);
- mImageSceneModes.insert(CxeSettingIds::IMAGE_SCENE_MACRO, imgSceneCloseUp);
+ mImageSceneModes.insert(Cxe::IMAGE_SCENE_MACRO, imgSceneCloseUp);
CxeScene imgPortraitscene;
- imgPortraitscene.insert(CxeSettingIds::SCENE_ID, CxeSettingIds::IMAGE_SCENE_PORTRAIT);
+ imgPortraitscene.insert(CxeSettingIds::SCENE_ID, Cxe::IMAGE_SCENE_PORTRAIT);
imgPortraitscene.insert(CxeSettingIds::FOCAL_RANGE, CxeAutoFocusControl::Portrait);
imgPortraitscene.insert(CxeSettingIds::WHITE_BALANCE, WhitebalanceAutomatic);
imgPortraitscene.insert(CxeSettingIds::EXPOSURE_MODE, ExposureBacklight);
@@ -549,12 +574,13 @@
imgPortraitscene.insert(CxeSettingIds::EV_COMPENSATION_VALUE, 0);
imgPortraitscene.insert(CxeSettingIds::BRIGHTNESS, 0);
imgPortraitscene.insert(CxeSettingIds::FLASH_MODE, FlashAntiRedEye);
+ imgPortraitscene.insert(CxeSettingIds::FACE_TRACKING, 1);
- mImageSceneModes.insert(CxeSettingIds::IMAGE_SCENE_PORTRAIT, imgPortraitscene);
+ mImageSceneModes.insert(Cxe::IMAGE_SCENE_PORTRAIT, imgPortraitscene);
CxeScene imglandscapescene;
- imglandscapescene.insert(CxeSettingIds::SCENE_ID, CxeSettingIds::IMAGE_SCENE_SCENERY);
+ imglandscapescene.insert(CxeSettingIds::SCENE_ID, Cxe::IMAGE_SCENE_SCENERY);
imglandscapescene.insert(CxeSettingIds::FOCAL_RANGE, CxeAutoFocusControl::Infinity);
imglandscapescene.insert(CxeSettingIds::WHITE_BALANCE, WhitebalanceSunny);
imglandscapescene.insert(CxeSettingIds::EXPOSURE_MODE, ExposureAuto);
@@ -565,13 +591,14 @@
imglandscapescene.insert(CxeSettingIds::EV_COMPENSATION_VALUE, 0);
imglandscapescene.insert(CxeSettingIds::BRIGHTNESS, 0);
imglandscapescene.insert(CxeSettingIds::FLASH_MODE, FlashOff);
+ imglandscapescene.insert(CxeSettingIds::FACE_TRACKING, 0);
- mImageSceneModes.insert(CxeSettingIds::IMAGE_SCENE_SCENERY, imglandscapescene);
+ mImageSceneModes.insert(Cxe::IMAGE_SCENE_SCENERY, imglandscapescene);
CxeScene imgNightscene;
- imgNightscene.insert(CxeSettingIds::SCENE_ID, CxeSettingIds::IMAGE_SCENE_NIGHT);
+ imgNightscene.insert(CxeSettingIds::SCENE_ID, Cxe::IMAGE_SCENE_NIGHT);
imgNightscene.insert(CxeSettingIds::FOCAL_RANGE, CxeAutoFocusControl::Auto);
imgNightscene.insert(CxeSettingIds::WHITE_BALANCE, WhitebalanceAutomatic);
imgNightscene.insert(CxeSettingIds::EXPOSURE_MODE, ExposureNight);
@@ -582,12 +609,13 @@
imgNightscene.insert(CxeSettingIds::EV_COMPENSATION_VALUE, 0);
imgNightscene.insert(CxeSettingIds::BRIGHTNESS, 0);
imgNightscene.insert(CxeSettingIds::FLASH_MODE, FlashOff);
+ imgNightscene.insert(CxeSettingIds::FACE_TRACKING, 1);
- mImageSceneModes.insert(CxeSettingIds::IMAGE_SCENE_NIGHT, imgNightscene);
+ mImageSceneModes.insert(Cxe::IMAGE_SCENE_NIGHT, imgNightscene);
CxeScene imgNightpotraitscene;
- imgNightpotraitscene.insert(CxeSettingIds::SCENE_ID, CxeSettingIds::IMAGE_SCENE_NIGHTPORTRAIT);
+ imgNightpotraitscene.insert(CxeSettingIds::SCENE_ID, Cxe::IMAGE_SCENE_NIGHTPORTRAIT);
imgNightpotraitscene.insert(CxeSettingIds::FOCAL_RANGE, CxeAutoFocusControl::Portrait);
imgNightpotraitscene.insert(CxeSettingIds::WHITE_BALANCE, WhitebalanceAutomatic);
imgNightpotraitscene.insert(CxeSettingIds::EXPOSURE_MODE, ExposureNight);
@@ -598,13 +626,14 @@
imgNightpotraitscene.insert(CxeSettingIds::EV_COMPENSATION_VALUE, 0);
imgNightpotraitscene.insert(CxeSettingIds::BRIGHTNESS, 0);
imgNightpotraitscene.insert(CxeSettingIds::FLASH_MODE, FlashAntiRedEye);
+ imgNightpotraitscene.insert(CxeSettingIds::FACE_TRACKING, 1);
- mImageSceneModes.insert(CxeSettingIds::IMAGE_SCENE_NIGHTPORTRAIT, imgNightpotraitscene);
+ mImageSceneModes.insert(Cxe::IMAGE_SCENE_NIGHTPORTRAIT, imgNightpotraitscene);
CX_DEBUG_EXIT_FUNCTION();
}
-/*
+/*!
* Returns the current image scene mode.
*/
CxeScene& CxeSettingsModelImp::currentImageScene()
@@ -616,7 +645,7 @@
}
-/*
+/*!
* Returns the current video scene mode.
*/
CxeScene& CxeSettingsModelImp::currentVideoScene()
@@ -628,13 +657,96 @@
}
-/*
-* Updating settings model whenever mode is changed from image to video and vice-versa.
+/*!
+* Restores settings whenever we switch between Image/Video modes or
+* during startup.
*/
void CxeSettingsModelImp::cameraModeChanged(Cxe::CameraMode newMode)
{
CX_DEBUG_ENTER_FUNCTION();
+
+ if (newMode == Cxe::ImageMode) {
+ restoreImageSettings();
+ } else {
+ restoreVideoSettings();
+ }
+
mCameraMode = newMode;
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+
+/*!
+* Restores image settings, during mode change or during startup.
+*/
+void CxeSettingsModelImp::restoreImageSettings()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ CxeError::Id err = CxeError::None;
+ QVariant currentSceneInUse = mCurrentImgScene[CxeSettingIds::SCENE_ID];
+
+ // get the image scene value from cenrep and load the scene settings
+ QVariant cenrepSceneValue;
+ QString key(CxeSettingIds::IMAGE_SCENE);
+ err = getSettingValue(key, cenrepSceneValue);
+
+ bool ok2LoadSceneSettings = (cenrepSceneValue != currentSceneInUse);
+
+ if (!err && ok2LoadSceneSettings) {
+ // loading scene settings
+ err = loadSceneData(cenrepSceneValue.toString(), mCurrentImgScene);
+ }
+
+ // Updating Flash setting from cenrep
+ QVariant value;
+ key = CxeSettingIds::FLASH_MODE;
+ err = getSettingValue(key, value);
+
+ if (!err && mCurrentImgScene.contains(key)) {
+ // update local datastructure with flash setting value from cenrep.
+ CX_DEBUG(( "flash setting value %d", value.toInt()));
+ mCurrentImgScene[key] = value;
+ }
+
+ // Updating Face Tracking setting from cenrep
+ key = CxeSettingIds::FACE_TRACKING;
+ err = getSettingValue(key, value);
+
+ if (!err && mCurrentImgScene.contains(key)) {
+ // update local datastructure with flash setting value from cenrep.
+ CX_DEBUG(( "Face Tracking setting value %d", value.toInt()));
+ mCurrentImgScene[key] = value;
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+
+/*!
+* Restores video settings, during mode change or during startup.
+*/
+void CxeSettingsModelImp::restoreVideoSettings()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ CxeError::Id err = CxeError::None;
+ QVariant currentSceneInUse = mCurrentVidScene[CxeSettingIds::SCENE_ID];
+
+ // get the video scene value from cenrep and load the scene settings
+ QVariant cenrepSceneValue;
+ err = getSettingValue(CxeSettingIds::VIDEO_SCENE, cenrepSceneValue);
+
+ bool ok2LoadSceneSettings = (cenrepSceneValue != currentSceneInUse);
+
+ if (!err && ok2LoadSceneSettings) {
+ // loading video scene settings
+ loadSceneData(cenrepSceneValue.toString(), mCurrentVidScene);
+ }
+
CX_DEBUG_EXIT_FUNCTION();
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/src/cxesnapshotcontrol.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2010 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 <QSize>
+#include "cxutils.h"
+#include "cxesnapshotcontrol.h"
+#include "cxesnapshotcontrolprivate.h"
+
+/*!
+* Constructor.
+* @param device Camera device interface, used for getting hold of adaptation snapshot API.
+*/
+CxeSnapshotControl::CxeSnapshotControl(CxeCameraDevice& device)
+{
+ d = new CxeSnapshotControlPrivate(this, device);
+ CX_ASSERT_ALWAYS(d);
+}
+
+/*!
+* Destructor.
+*/
+CxeSnapshotControl::~CxeSnapshotControl()
+{
+ delete d;
+}
+
+/*!
+* Get the state of Snapshot Control.
+* @return The current state.
+*/
+CxeSnapshotControl::State CxeSnapshotControl::state() const
+{
+ return d->state();
+}
+
+/*!
+* Calculate snapshot size based on diplay size and image / video output resolution.
+* @param displaySize Display size in pixels.
+* @param outputResolution Resolution of the output image / video in pixels.
+* @return Proposed best snapshot size.
+*/
+QSize CxeSnapshotControl::calculateSnapshotSize(const QSize& displaySize, Cxe::AspectRatio aspectRatio) const
+{
+ return d->calculateSnapshotSize(displaySize, aspectRatio);
+}
+
+/*!
+* Start snapshot events. Snapshots will be signalled
+* through snapshotReady() signal.
+* @param size Size of the snapshot image.
+*/
+void CxeSnapshotControl::start(const QSize& size)
+{
+ d->start(size);
+}
+
+/*!
+* Stop snapshot events.
+*/
+void CxeSnapshotControl::stop()
+{
+ d->stop();
+}
+
+/*!
+* Handle camera events.
+* @param id Event uid.
+* @param error Status code of the event.
+*/
+void CxeSnapshotControl::handleCameraEvent(int eventUid, int error)
+{
+ d->handleCameraEvent(eventUid, error);
+}
+
+// end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/src/cxesnapshotcontrolprivate.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,310 @@
+/*
+* Copyright (c) 2010 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 <QSize>
+#include <QPixmap>
+// Note: Keep atleast one Qt include before preprocessor flags
+#ifdef Q_OS_SYMBIAN
+#include <e32base.h>
+#include <fbs.h>
+#include <ecam.h>
+#include <ecam/camerasnapshot.h>
+#endif // Q_OS_SYMBIAN
+
+#include "cxutils.h"
+#include "cxeerror.h"
+#include "cxeexception.h"
+#include "cxeerrormappingsymbian.h"
+#include "cxecameradevice.h"
+#include "cxestate.h"
+#include "cxesnapshotcontrol.h"
+#include "cxesnapshotcontrolprivate.h"
+
+
+namespace
+{
+ const int MAINTAIN_ASPECT = false;
+
+ const QSize ASPECT_RATIO_SIZE_4BY3 = QSize(4,3);
+ const QSize ASPECT_RATIO_SIZE_16BY9 = QSize(16, 9);
+ const QSize ASPECT_RATIO_SIZE_11BY9 = QSize(11, 9);
+
+#ifdef Q_OS_SYMBIAN
+ /*!
+ * Helper class for cleaning up MCameraBuffer instances.
+ */
+ class CxeCameraBufferCleanup
+ {
+ public:
+ explicit CxeCameraBufferCleanup(MCameraBuffer *buffer)
+ : mBuffer(buffer)
+ {
+ }
+
+ ~CxeCameraBufferCleanup()
+ {
+ if (mBuffer) {
+ CX_DEBUG(("CxeCameraBufferCleanup - releasing MCameraBuffer.."));
+ mBuffer->Release();
+ mBuffer = NULL;
+ }
+ }
+ private:
+ Q_DISABLE_COPY(CxeCameraBufferCleanup)
+ MCameraBuffer *mBuffer;
+ };
+#endif // Q_OS_SYMBIAN
+}
+
+
+/*!
+* Constructor.
+* @param parent Public interface of Snapshot control.
+* @param device Camera device interface, used for getting hold of adaptation snapshot API.
+*/
+CxeSnapshotControlPrivate::CxeSnapshotControlPrivate(CxeSnapshotControl *parent,
+ CxeCameraDevice& device)
+ : CxeStateMachine("CxeSnapshotControlPrivate"),
+ q(parent),
+ mDevice(device)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ CX_ASSERT_ALWAYS(q);
+ initializeStates();
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Destructor.
+*/
+CxeSnapshotControlPrivate::~CxeSnapshotControlPrivate()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ stop();
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Called when state changes.
+* @param newStateId Id of the new state.
+* @param error Error code or CxeError::None in successful case.
+*/
+void CxeSnapshotControlPrivate::handleStateChanged(int newStateId, CxeError::Id error)
+{
+ emit q->stateChanged(static_cast<CxeSnapshotControl::State>(newStateId), error);
+}
+
+
+/*!
+* Get the state of Snapshot Control.
+* @return The current state.
+*/
+CxeSnapshotControl::State CxeSnapshotControlPrivate::state() const
+{
+ return static_cast<CxeSnapshotControl::State> (stateId());
+}
+
+/*!
+* Initialize Snapshot Control states
+*/
+void CxeSnapshotControlPrivate::initializeStates()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ // addState( id, name, allowed next states )
+ addState(new CxeState(CxeSnapshotControl::Idle, "Idle", CxeSnapshotControl::Active));
+ addState(new CxeState(CxeSnapshotControl::Active, "Active", CxeSnapshotControl::Idle));
+
+ setInitialState(CxeSnapshotControl::Idle);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Calculate snapshot size based on diplay size and image / video output resolution.
+* @param displaySize Display size in pixels.
+* @param Cxe::AspectRatio Aspect ratio of image/video resolution.
+* @return Proposed best snapshot size.
+*/
+
+QSize CxeSnapshotControlPrivate::calculateSnapshotSize(const QSize& displaySize, Cxe::AspectRatio aspectRatio) const
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ CX_DEBUG(("CxeSnapshotControlPrivate - display size (%d,%d)", displaySize.width(), displaySize.height()));
+
+ // Take resolution as reference for aspect ratio.
+ // Scale keeping aspect ratio to just fit display.
+ QSize size;
+
+ if (aspectRatio == Cxe::AspectRatio4to3) {
+ size = ASPECT_RATIO_SIZE_4BY3;
+ } else if (aspectRatio == Cxe::AspectRatio16to9) {
+ size = ASPECT_RATIO_SIZE_16BY9;
+ } else if (aspectRatio == Cxe::AspectRatio11to9) {
+ size = ASPECT_RATIO_SIZE_11BY9;
+ }
+ size.scale(displaySize, Qt::KeepAspectRatio);
+
+ CX_DEBUG(("CxeSnapshotControlPrivate - adjusted final size, (%d,%d)", size.width(), size.height()));
+
+ CX_DEBUG_EXIT_FUNCTION();
+
+ return size;
+}
+
+
+/*!
+* Start getting snapshots from camera.
+* Throws CxeException with CxeError::Id if error encountered.
+* @param size Size of the snapshot in pixels.
+*/
+void CxeSnapshotControlPrivate::start(const QSize &size)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+#ifdef Q_OS_SYMBIAN
+ CCamera::CCameraSnapshot *ss = mDevice.cameraSnapshot();
+ CX_ASSERT_ALWAYS(ss);
+
+ if (ss->IsSnapshotActive()) {
+ CX_DEBUG(("Stop currently active snapshot.."));
+ ss->StopSnapshot();
+ }
+
+ // Prepare snapshot
+ CCamera::TFormat snapFormat = CCamera::EFormatFbsBitmapColor16MU;
+ TSize snapSize = TSize(size.width(), size.height());
+
+ CX_DEBUG(("Prepare snapshot, size (%d x %d)..", size.width(), size.height()));
+ TRAPD(status, ss->PrepareSnapshotL(snapFormat, snapSize, MAINTAIN_ASPECT));
+ CxeException::throwIfError(CxeErrorHandlingSymbian::map(status));
+ CX_DEBUG(("After prepare ECAM modified size to (%d x %d)..", size.width(), size.height()));
+
+ CX_DEBUG(("Start snapshot.."));
+ ss->StartSnapshot();
+#else
+ Q_UNUSED(size);
+#endif // Q_OS_SYMBIAN
+ setState(CxeSnapshotControl::Active);
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Stop getting snapshots from camera.
+*/
+void CxeSnapshotControlPrivate::stop()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+#ifdef Q_OS_SYMBIAN
+ if (mDevice.cameraSnapshot()) {
+ mDevice.cameraSnapshot()->StopSnapshot();
+ }
+#endif // Q_OS_SYMBIAN
+ setState(CxeSnapshotControl::Idle);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Helper method for getting the snapshot.
+* Throws exception if fetching the snapshot fails.
+* @return QImage containing the snapshot.
+*/
+QImage CxeSnapshotControlPrivate::snapshot()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ QImage image;
+
+ #ifdef Q_OS_SYMBIAN
+
+ CFbsBitmap *snapshot = NULL;
+ TRAPD(status, {
+ RArray<TInt> frameIndex;
+ CleanupClosePushL(frameIndex);
+
+ MCameraBuffer &buffer(mDevice.cameraSnapshot()->SnapshotDataL(frameIndex));
+ // Make sure buffer is released on leave / exception.
+ // Buffer is released once the cleanup item goes out of scope.
+ CxeCameraBufferCleanup cleaner(&buffer);
+
+ TInt firstImageIndex(frameIndex.Find(0));
+ snapshot = &buffer.BitmapL(firstImageIndex);
+
+ CleanupStack::PopAndDestroy(); // frameIndex
+
+ TSize size = snapshot->SizeInPixels();
+ TInt sizeInWords = size.iHeight * CFbsBitmap::ScanLineLength(size.iWidth, EColor16MU) / sizeof(TUint32);
+ CX_DEBUG(("size %d x %d, sizeInWords = %d", size.iWidth, size.iHeight, sizeInWords ));
+
+ CX_DEBUG(("Creating QImage"));
+ image = QImage(size.iWidth, size.iHeight, QImage::Format_RGB32);
+
+ // Convert to QImage
+ snapshot->LockHeap();
+ const uchar *dataPtr = (const uchar*) snapshot->DataAddress();
+ uchar *dst = image.bits();
+ memcpy(dst, dataPtr, image.numBytes());
+ snapshot->UnlockHeap();
+
+ });
+ // We throw error with the Symbian error code if there was problems.
+ CxeException::throwIfError(status);
+
+
+ #endif // Q_OS_SYMBIAN
+
+ CX_DEBUG_EXIT_FUNCTION();
+ return image;
+}
+
+/*!
+* Handle camera snapshot events.
+* @param id Event uid.
+* @param error Status code of the event.
+*/
+void CxeSnapshotControlPrivate::handleCameraEvent(int id, int error)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ // Ignoring all events if not active.
+ if (state() == CxeSnapshotControl::Active) {
+#ifdef Q_OS_SYMBIAN
+ if (id == KUidECamEventSnapshotUidValue) {
+ QImage ss;
+
+ if (!error) {
+ try {
+ ss = snapshot();
+ } catch (const CxeException& e) {
+ // Note: Normally CxeException carries CxeError::Id,
+ // but we intentionally use Symbian code in getSnapshot
+ // as it's easier to handle here.
+ error = e.error();
+ } catch (...) {
+ error = KErrGeneral;
+ }
+ }
+
+ // Emit snapshot ready signal through the public interface.
+ emit q->snapshotReady(CxeErrorHandlingSymbian::map(error), ss);
+ }
+#else
+ Q_UNUSED(id)
+ Q_UNUSED(error)
+#endif // Q_OS_SYMBIAN
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+// end of file
--- a/camerauis/cameraxui/cxengine/src/cxesoundplayersymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxesoundplayersymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -16,12 +16,14 @@
*/
#include <cxesoundplayersymbian.h>
#include <AudioPreference.h>
+#include <ProfileEngineSDKCRKeys.h>
#include "cxutils.h"
#include "cxecameradevicecontrolsymbian.h"
#include "cxestate.h"
+#include "cxesettings.h"
+
const TUint KCxeAudioPriority = KAudioPriorityCameraTone;
-//const TUint KCxeAudioPriority = KAudioPriorityVideoRecording;
_LIT(KCxeCaptureSound, "z:\\system\\sounds\\digital\\capture.wav");
_LIT(KCxeVideoStartSound, "z:\\system\\sounds\\digital\\videoStart.wav");
@@ -29,13 +31,25 @@
_LIT(KCxeAutoFocusSound, "z:\\system\\sounds\\digital\\autoFocus.wav");
-CxeSoundPlayerSymbian::CxeSoundPlayerSymbian(CaptureSound soundId) :
+CxeSoundPlayerSymbian::CxeSoundPlayerSymbian(CaptureSound soundId,
+ CxeSettings &settings) :
CxeStateMachine("CxeSoundPlayerSymbian"),
mAudioPlayer(NULL),
- mSoundId(soundId)
+ mSoundId(soundId),
+ mUseSound(true),
+ mCaptureSoundForced(false),
+ mSettings(settings)
{
CX_DEBUG_ENTER_FUNCTION();
+ checkCaptureSoundSettings();
+
+ // connect to setting changed signal in order to monitor
+ // profile warning tone changes
+ connect(&mSettings,
+ SIGNAL(settingValueChanged(long int, unsigned long int, QVariant)),
+ this, SLOT(enableSound(long int, unsigned long int, QVariant)));
+
qRegisterMetaType<CxeSoundPlayerSymbian::State>();
initializeStates();
@@ -52,6 +66,11 @@
CX_DEBUG_EXIT_FUNCTION();
}
+/*!
+ * Plays the current sound file if soundplayer is in correct state. Once
+ * playing is finished or there is an error playComplete signal is emitted.
+ * \sa playComplete()
+ */
void CxeSoundPlayerSymbian::play()
{
CX_DEBUG_ENTER_FUNCTION();
@@ -59,15 +78,25 @@
// Only play the capture sound if CMdaAudioPlayerUtility is initialised
if (state() == Ready) {
- //! @todo: Define & implement what to do, when sound is already playing.
- // Important for sequence mode.
- setState(Playing);
- mAudioPlayer->Play();
+
+ if (mUseSound) {
+ //! @todo: Define & implement what to do, when sound is already playing.
+ // Important for sequence mode.
+ setState(Playing);
+ mAudioPlayer->Play();
+ } else {
+ CX_DEBUG(("CxeSoundPlayerSymbian::play capture sounds turned off"));
+
+ // sounds are off and we don't play the sound,
+ // act as the sound has been played
+ emit playComplete(KErrNone);
+ }
+
} else if( state() == NotReady ) {
// Here sound loading has failed.
// Emit signal with error code.
emit playComplete(KErrNotReady);
- }
+ }
CX_DEBUG_EXIT_FUNCTION();
}
@@ -131,9 +160,10 @@
delete mAudioPlayer;
mAudioPlayer = 0;
}
- TRAP( error, mAudioPlayer =
- CMdaAudioPlayerUtility::NewFilePlayerL(*filename, *this, KCxeAudioPriority,
- TMdaPriorityPreference(KAudioPrefCamera)) );
+ TRAP(error, mAudioPlayer =
+ CMdaAudioPlayerUtility::NewFilePlayerL(*filename,
+ *this, KCxeAudioPriority,
+ TMdaPriorityPreference(KAudioPrefCamera)));
if (!error) {
setState(Opening);
} else {
@@ -145,16 +175,25 @@
}
-void CxeSoundPlayerSymbian::handleStateChanged(int /*newStateId*/, CxeError::Id /*error*/)
+void CxeSoundPlayerSymbian::handleStateChanged(int newStateId, CxeError::Id error)
{
+ Q_UNUSED(newStateId);
+ Q_UNUSED(error);
// No implementation needed, because state is not visible outside of this class
}
+/*!
+ * Returns the current sound player state.
+ * \return Current state
+ */
CxeSoundPlayerSymbian::State CxeSoundPlayerSymbian::state() const
{
return static_cast<State>(stateId());
}
+/*!
+ * Initialize CxeStateMachine.
+ */
void CxeSoundPlayerSymbian::initializeStates()
{
// addState(id, name, allowed next states)
@@ -165,3 +204,75 @@
setInitialState(NotReady);
}
+
+/*!
+ * Enables or disables the capture sound. If capture sound is forced to
+ * be always on, then the capture sound cannot be disabled.
+ *
+ * \param uid UID of the changed setting
+ * \param key Key of the changed setting
+ * \param value New setting value
+ */
+void CxeSoundPlayerSymbian::enableSound(long int uid, unsigned long int key, QVariant value)
+{
+
+ // selftimer is only interested in warning tones
+ if (uid == KCRUidProfileEngine.iUid && key == KProEngActiveWarningTones) {
+ CX_DEBUG_IN_FUNCTION();
+ // possible values are:
+ // 0 -> warning tones off
+ // 1 -> warning tones on
+ bool warningTonesEnabled = (value.toInt() == 1);
+
+ // update sound
+ mUseSound = mCaptureSoundForced || warningTonesEnabled;
+ }
+
+ CX_DEBUG(("CxeSoundPlayerSymbian::enableSound <> Use sound [%d]",
+ mUseSound));
+}
+
+/*!
+ * Checks the initial capture sound settings based on profile warning tones
+ * and whether the capture sound is forced to be always on. Connects settings
+ * signal for capture sounds changes to enableCaptureSound slot.
+ *
+ * \sa enableCaptureSound()
+ */
+void CxeSoundPlayerSymbian::checkCaptureSoundSettings()
+{
+
+ CX_DEBUG_ENTER_FUNCTION();
+
+ QVariant value(0);
+
+ // get current profile setting for using camerasound
+ // camera sound follows warning tone setting
+ unsigned long int key = KProEngActiveWarningTones;
+ long int uid = KCRUidProfileEngine.iUid;
+ mSettings.get(uid, key, Cxe::Repository, value);
+
+ // possible values are:
+ // 0 -> warning tones off
+ // 1 -> warning tones on
+ bool warningTonesEnabled = (value.toInt() == 1);
+ CX_DEBUG(("Warning tones enabled [%d]", value.toInt()));
+
+ // check whether capture sound is forced or not
+ int forced = 0;
+ mSettings.get(CxeSettingIds::CAPTURE_SOUND_ALWAYS_ON, forced);
+ // 0 -> capture sound not forced
+ // 1 -> capture sound forced on
+ mCaptureSoundForced = (forced == 1);
+ CX_DEBUG(("Capture sound forced [%d]", forced));
+
+ // use sound if forced on or warningtones are enabled
+ mUseSound = mCaptureSoundForced || warningTonesEnabled;
+ CX_DEBUG(("Use sound [%d]", mUseSound));
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+// end of file
+
--- a/camerauis/cameraxui/cxengine/src/cxestillcapturecontrolsymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxestillcapturecontrolsymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -18,11 +18,9 @@
#include <algorithm>
#include <exception>
-#include <fbs.h>
#include <QPixmap>
#include <coemain.h>
#include <ECamOrientationCustomInterface2.h>
-#include <ecam/camerasnapshot.h>
#include <ecamfacetrackingcustomapi.h>
#include "cxestillcapturecontrolsymbian.h"
@@ -34,8 +32,8 @@
#include "cxecameradevice.h"
#include "cxesoundplayersymbian.h"
#include "cxestillimagesymbian.h"
-#include "cxeviewfindercontrol.h"
#include "cxeviewfindercontrolsymbian.h"
+#include "cxesnapshotcontrol.h"
#include "cxesettingsmappersymbian.h"
#include "cxestate.h"
#include "cxesettings.h"
@@ -53,16 +51,18 @@
// constants
-const int KMaintainAspectRatio = false;
-const TInt64 KMinRequiredSpaceImage = 2000000;
+namespace
+{
+ const TInt64 KMinRequiredSpaceImage = 2000000;
+}
-
-/**
+/*!
* Constructor.
*/
CxeStillCaptureControlSymbian::CxeStillCaptureControlSymbian(
CxeCameraDevice &cameraDevice,
CxeViewfinderControl &viewfinderControl,
+ CxeSnapshotControl &snapshotControl,
CxeCameraDeviceControl &cameraDeviceControl,
CxeFilenameGenerator &nameGenerator,
CxeSensorEventHandler &sensorEventHandler,
@@ -74,6 +74,7 @@
: CxeStateMachine("CxeStillCaptureControlSymbian"),
mCameraDevice(cameraDevice),
mViewfinderControl(viewfinderControl),
+ mSnapshotControl(snapshotControl),
mCameraDeviceControl(cameraDeviceControl),
mFilenameGenerator(nameGenerator),
mSensorEventHandler(sensorEventHandler),
@@ -116,21 +117,21 @@
// Connect ECam image buffer ready event
connect(&mCameraDeviceControl, SIGNAL(imageBufferReady(MCameraBuffer*,int)),
this, SLOT(handleImageData(MCameraBuffer*,int)));
- // Connect signals for ECam events
- connect(&mCameraDeviceControl, SIGNAL(cameraEvent(int,int)),
- this, SLOT(handleCameraEvent(int,int)));
+ // connect snapshot ready signal
+ connect(&mSnapshotControl, SIGNAL(snapshotReady(CxeError::Id, const QImage&)),
+ this, SLOT(handleSnapshotReady(CxeError::Id, const QImage&)));
OstTrace0(camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_CREATE_MID2, "msg: e_CX_ENGINE_CONNECT_SIGNALS 0");
mImageDataQueue = new CxeImageDataQueueSymbian();
- mAutoFocusSoundPlayer = new CxeSoundPlayerSymbian(CxeSoundPlayerSymbian::AutoFocus);
- mCaptureSoundPlayer = new CxeSoundPlayerSymbian(CxeSoundPlayerSymbian::StillCapture);
+ mAutoFocusSoundPlayer = new CxeSoundPlayerSymbian(CxeSoundPlayerSymbian::AutoFocus, mSettings);
+ mCaptureSoundPlayer = new CxeSoundPlayerSymbian(CxeSoundPlayerSymbian::StillCapture, mSettings);
OstTrace0(camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_CREATE_OUT, "msg: e_CX_STILLCAPTURECONTROL_NEW 0");
CX_DEBUG_EXIT_FUNCTION();
}
-/**
+/*!
* Destructor.
*/
CxeStillCaptureControlSymbian::~CxeStillCaptureControlSymbian()
@@ -148,7 +149,7 @@
CX_DEBUG_EXIT_FUNCTION();
}
-/**
+/*!
* Return the current state.
*/
CxeStillCaptureControl::State CxeStillCaptureControlSymbian::state() const
@@ -156,7 +157,7 @@
return static_cast<CxeStillCaptureControl::State>( stateId() );
}
-/**
+/*!
* Handle state changed event. Normally just emits the signal
* for observers to react appropriately.
*/
@@ -165,7 +166,7 @@
emit stateChanged( static_cast<State>( newStateId ), error );
}
-/**
+/*!
* Initialize the control states.
*/
void CxeStillCaptureControlSymbian::initializeStates()
@@ -178,7 +179,7 @@
setInitialState(Uninitialized);
}
-/**
+/*!
* Initialize the still image capture control.
*/
void CxeStillCaptureControlSymbian::init()
@@ -196,7 +197,7 @@
CX_DEBUG_EXIT_FUNCTION();
}
-/**
+/*!
* Un-initialize the image mode.
*/
void CxeStillCaptureControlSymbian::deinit()
@@ -208,7 +209,7 @@
return;
}
- OstTrace0( camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_DEINIT_IN, "msg: e_CX_STILL_CAPCONT_DEINIT 1" );
+ OstTrace0( camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_DEINIT_IN, "msg: e_CX_STILLCAPCONT_DEINIT 1" );
// Stop monitoring disk space.
mDiskMonitor.stop();
@@ -217,24 +218,23 @@
//stop viewfinder
mViewfinderControl.stop();
+ if (state() == Capturing) {
+ mCameraDevice.camera()->CancelCaptureImage();
+ }
+
// disable sensor event handler.
mSensorEventHandler.deinit();
- if (mCameraDevice.cameraSnapshot()) {
- mCameraDevice.cameraSnapshot()->StopSnapshot();
- }
+ mSnapshotControl.stop();
- if (state() == Capturing) {
- mCameraDevice.camera()->CancelCaptureImage();
- }
setState(Uninitialized);
- OstTrace0( camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_DEINIT_OUT, "msg: e_CX_STILL_CAPCONT_DEINIT 0" );
+ OstTrace0( camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_DEINIT_OUT, "msg: e_CX_STILLCAPCONT_DEINIT 0" );
CX_DEBUG_EXIT_FUNCTION();
}
-/**!
+/*!
* Prepare still capture mode.
*/
void CxeStillCaptureControlSymbian::prepare()
@@ -246,7 +246,7 @@
return;
}
- OstTrace0( camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_PREPARE_IN, "msg: e_CX_STILLCAPCONT_PREPARE 1" );
+ OstTrace0(camerax_performance, CXESTILLCAPTURECONTROL_PREPARE_IN, "msg: e_CX_STILLCAPCONT_PREPARE 1");
int err = KErrNone;
CxeError::Id cxErr = getImageQualityDetails(mCurrentImageDetails);
@@ -271,9 +271,9 @@
// Prepare Image capture
CCamera::TFormat imgFormat = supportedStillFormat(mCameraDeviceControl.cameraIndex());
- OstTrace0(camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_PREPARE_MID1, "msg: e_CX_PREPARE_IMAGE_CAPTURE 1");
+ OstTrace0(camerax_performance, CXESTILLCAPTURECONTROL_PREPARE_MID1, "msg: e_CX_PREPARE_IMAGE_CAPTURE 1");
TRAP(err, mCameraDevice.camera()->PrepareImageCaptureL(imgFormat, ecamStillResolutionIndex));
- OstTrace0(camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_PREPARE_MID2, "msg: e_CX_PREPARE_IMAGE_CAPTURE 0");
+ OstTrace0(camerax_performance, CXESTILLCAPTURECONTROL_PREPARE_MID2, "msg: e_CX_PREPARE_IMAGE_CAPTURE 0");
CX_DEBUG(("PrepareImageCaptureL done, err=%d, resolution index = %d", err, ecamStillResolutionIndex));
@@ -318,63 +318,47 @@
// Inform interested parties that image mode has been prepared for capture
emit imagePrepareComplete(CxeErrorHandlingSymbian::map(err));
- OstTrace0( camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_PREPARE_OUT, "msg: e_CX_STILLCAPCONT_PREPARE 0" );
+ OstTrace0(camerax_performance, CXESTILLCAPTURECONTROL_GOTOSTILL, "msg: e_CX_GO_TO_STILL_MODE 0");
+ OstTrace0(camerax_performance, CXESTILLCAPTURECONTROL_PREPARE_OUT, "msg: e_CX_STILLCAPCONT_PREPARE 0");
CX_DEBUG_EXIT_FUNCTION();
}
-/**!
+/*!
Prepare still snapshot
Returns symbian error code.
*/
int CxeStillCaptureControlSymbian::prepareStillSnapshot()
{
CX_DEBUG_ENTER_FUNCTION();
-
- CCamera::CCameraSnapshot *cameraSnapshot = mCameraDevice.cameraSnapshot();
- CX_ASSERT_ALWAYS(cameraSnapshot);
-
- int err = KErrNone;
- // Whether or not we have postcapture on, we need the snapshot for Thumbnail Manager.
- if (cameraSnapshot) {
- // Cancel active snapshot
- cameraSnapshot->StopSnapshot();
+ OstTrace0( camerax_performance, CXESTILLCAPTURECONTROL_PREPARESNAP_1, "msg: e_CX_PREPARE_SNAPSHOT 1" );
- // Prepare snapshot
- CCamera::TFormat snapFormat = CCamera::EFormatFbsBitmapColor16MU;
- OstTrace0( camerax_performance, DUP4_CXESTILLCAPTURECONTROLSYMBIAN_PREPARE, "msg: e_CX_PREPARE_SNAPSHOT 1" );
- TRAP(err, cameraSnapshot->PrepareSnapshotL(snapFormat,
- getSnapshotSize(),
- KMaintainAspectRatio));
- OstTrace0( camerax_performance, DUP5_CXESTILLCAPTURECONTROLSYMBIAN_PREPARE, "msg: e_CX_PREPARE_SNAPSHOT 0" );
- CX_DEBUG(("PrepareSnapshotL done, err=%d", err));
-
- // Start snapshot if no errors encountered.
- if (err == KErrNone) {
- CX_DEBUG(("Start still snapshot"));
- cameraSnapshot->StartSnapshot();
- }
- } else {
- // No snapshot interface available. Report error.
- // Assert above takes care of this, but keeping this as an option.
- err = KErrNotReady;
+ int status(KErrNone);
+ try {
+ QSize snapshotSize = mSnapshotControl.calculateSnapshotSize(
+ mViewfinderControl.deviceDisplayResolution(),
+ mCurrentImageDetails.mAspectRatio);
+ mSnapshotControl.start(snapshotSize);
+ } catch (...) {
+ status = KErrGeneral;
}
+ OstTrace0( camerax_performance, CXESTILLCAPTURECONTROL_PREPARESNAP_2, "msg: e_CX_PREPARE_SNAPSHOT 0" );
CX_DEBUG_EXIT_FUNCTION();
-
- return err;
+ return status;
}
-/**!
+/*!
imageInfo contains image qualities details
Returns CxeError error code.
*/
CxeError::Id CxeStillCaptureControlSymbian::getImageQualityDetails(CxeImageDetails &imageInfo)
{
CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0( camerax_performance, CXESTILLCAPTURECONTROL_GETQUALITYDETAILS_1, "msg: e_CX_GET_QUALITY_DETAILS 1" );
int imageQuality = 0;
CxeError::Id err = CxeError::None;
@@ -396,37 +380,14 @@
imageInfo = mIcmSupportedImageResolutions.at(imageQuality);
}
+ OstTrace0( camerax_performance, CXESTILLCAPTURECONTROL_GETQUALITYDETAILS_2, "msg: e_CX_GET_QUALITY_DETAILS 0" );
CX_DEBUG_EXIT_FUNCTION();
return err;
}
-
/*!
-* Returns snapshot size. Snapshot size is calculated based on the
-* display resolution and current image aspect ratio.
-*/
-TSize CxeStillCaptureControlSymbian::getSnapshotSize() const
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- TSize snapshotSize;
-
- QSize deviceResolution = mViewfinderControl.deviceDisplayResolution();
- QSize size = QSize(mCurrentImageDetails.mWidth, mCurrentImageDetails.mHeight);
-
- // scale according to aspect ratio.
- size.scale(deviceResolution.width(), deviceResolution.height(), Qt::KeepAspectRatio);
- CX_DEBUG(("Still Snapshot size, (%d,%d)", size.width(), size.height()));
- snapshotSize.SetSize(size.width(), deviceResolution.height());
-
- CX_DEBUG_EXIT_FUNCTION();
-
- return snapshotSize;
-}
-
-
-/**
* Command to start image capture now.
+ * @sa handleCameraEvent
*/
void CxeStillCaptureControlSymbian::capture()
{
@@ -435,10 +396,10 @@
// Start the image capture as fast as possible to minimize lag.
// Check e.g. space available *after* this.
+ // Capture sound will be played when we receive "image capture event" from ECAM.
mCameraDevice.camera()->CaptureImage();
if (imagesLeft() > 0) {
- mCaptureSoundPlayer->play();
setState(Capturing);
//! @todo: NOTE: This call may not stay here. It can move depending on the implementation for burst capture.
@@ -464,7 +425,7 @@
}
-/* !
+/*!
@Param cameraIndex indicates which camera we are in use, primary/secondary
Returns the format we use for specific camera index.
*/
@@ -481,115 +442,62 @@
return imgFormat;
}
-
-/**
- * Camera events. Only relevant one(s) are handled.
+/*!
+ * Snapshot ready notification. Ask the snapshot from snapshot interface.
+ * NB: Typically snapshot arrives before image data but can be in reverse
+ * order as well.
+ *
+ * @param status Status of snapshot creation. CxeError::None if no error, otherwise contains the error code.
+ * @param snapshot Snapshot as QImage
*/
-void CxeStillCaptureControlSymbian::handleCameraEvent(int eventUid, int error)
+void CxeStillCaptureControlSymbian::handleSnapshotReady(CxeError::Id status, const QImage &snapshot)
{
CX_DEBUG_ENTER_FUNCTION();
+ if (mCameraDeviceControl.mode() == Cxe::ImageMode) {
- if (eventUid == KUidECamEventSnapshotUidValue &&
- mCameraDeviceControl.mode() == Cxe::ImageMode) {
- handleSnapshotEvent(CxeErrorHandlingSymbian::map(error));
+ OstTrace0(camerax_performance, CXESTILLCAPTURECONTROL_HANDLESNAPSHOT_1, "msg: e_CX_HANDLE_SNAPSHOT 1");
+
+ QPixmap ss = QPixmap::fromImage(snapshot);
+ // Get image container for current snapshot index.
+ // Remember to increment counter.
+ CxeStillImageSymbian* stillImage = getImageForIndex(mNextSnapshotIndex++);
+ if (status == CxeError::None) {
+ stillImage->setSnapshot(ss);
+ }
+
+ // Emit snapshotReady signal in all cases (error or not)
+ emit snapshotReady(status, snapshot, stillImage->id());
+
+ // When the snapshot ready event is handled, prepare new filename.
+ if (stillImage->filename().isEmpty()) {
+ // Error ignored at this point, try again when image data arrives.
+ prepareFilename(stillImage);
+ }
+
+ OstTrace0(camerax_performance, CXESTILLCAPTURECONTROL_HANDLESNAPSHOT_2, "msg: e_CX_HANDLE_SNAPSHOT 0");
}
CX_DEBUG_EXIT_FUNCTION();
}
-/**
- * Snapshot ready notification. Ask the snapshot from snapshot interface.
- * NB: Typically snapshot arrives before image data but can be in reverse
- * order as well.
- */
-void CxeStillCaptureControlSymbian::handleSnapshotEvent(CxeError::Id error)
+/*!
+* Handle ECAM events.
+* Needed only for capture sound synchronization.
+* @param eventUid ECAM event id.
+* @param error Error code. KErrNone if operation has been successful.
+*/
+void CxeStillCaptureControlSymbian::handleCameraEvent(int eventUid, int error)
{
- CX_DEBUG_ENTER_FUNCTION();
-
- if (state() == CxeStillCaptureControl::Uninitialized) {
- // we ignore this event, when we are not active
- return;
- }
-
- OstTrace0( camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_HANDLESNAPSHOTEVENT, "msg: e_CX_HANDLE_SNAPSHOT 1" );
-
- // Get image container for current snapshot index.
- // Remember to increment counter.
- CxeStillImageSymbian* stillImage = getImageForIndex(mNextSnapshotIndex++);
-
- if (error == CxeError::None) {
- try {
- stillImage->setSnapshot(extractSnapshot());
- } catch (const std::exception& ex) {
- error = CxeError::General;
+ if (eventUid == KUidECamEventImageCaptureEventUidValue && error == KErrNone) {
+ CX_DEBUG(("CxeStillCaptureControlSymbian::handleCameraEvent - image capture event"));
+ if (state() == CxeStillCaptureControl::Capturing) {
+ mCaptureSoundPlayer->play();
}
}
-
- // Emit snapshotReady signal in all cases (error or not)
- emit snapshotReady(error, stillImage->snapshot(), stillImage->id());
-
- // When the snapshot ready event is handled, prepare new filename.
- if (stillImage->filename().isEmpty()) {
- // Error ignored at this point, try again when image data arrives.
- prepareFilename(stillImage);
- }
-
- OstTrace0( camerax_performance, DUP1_CXESTILLCAPTURECONTROLSYMBIAN_HANDLESNAPSHOTEVENT, "msg: e_CX_HANDLE_SNAPSHOT 0" );
- CX_DEBUG_EXIT_FUNCTION();
}
-/**
-* Gets QPixmap snapshot from ECAM buffer, if available.
-* @param buffer ECAM buffer containing the snapshot data. Will be released when this
-* method returns, even on exception.
-*/
-QPixmap CxeStillCaptureControlSymbian::extractSnapshot()
-{
- CX_DEBUG_ENTER_FUNCTION();
- QPixmap pixmap;
- if (mCameraDevice.cameraSnapshot()) {
-
- QT_TRAP_THROWING({
- RArray<TInt> frameIndex;
- CleanupClosePushL(frameIndex);
-
- MCameraBuffer &buffer(mCameraDevice.cameraSnapshot()->SnapshotDataL(frameIndex));
-
- // Make sure buffer is released on leave / exception
- CxeCameraBufferCleanup cleaner(&buffer);
- TInt firstImageIndex(frameIndex.Find(0));
- CFbsBitmap &snapshot(buffer.BitmapL(firstImageIndex));
-
- CleanupStack::PopAndDestroy(); // frameIndex
-
- TSize size = snapshot.SizeInPixels();
- TInt sizeInWords = size.iHeight * CFbsBitmap::ScanLineLength(size.iWidth, EColor16MU) / sizeof(TUint32);
- CX_DEBUG(("size %d x %d, sizeInWords = %d", size.iWidth, size.iHeight, sizeInWords ));
-
- TUint32* pixelData = new (ELeave) TUint32[ sizeInWords ];
- // Convert to QImage
- snapshot.LockHeap();
- TUint32* dataPtr = snapshot.DataAddress();
- memcpy(pixelData, dataPtr, sizeof(TUint32)*sizeInWords);
- snapshot.UnlockHeap();
-
- CX_DEBUG(("Creating QImage"));
- QImage *snapImage = new QImage((uchar*)pixelData, size.iWidth, size.iHeight,
- CFbsBitmap::ScanLineLength(size.iWidth, EColor16MU),
- QImage::Format_RGB32);
-
- pixmap = QPixmap::fromImage(*snapImage);
- delete [] pixelData;
- delete snapImage;
- });
- }
-
- CX_DEBUG_EXIT_FUNCTION();
- return pixmap;
-}
-
-/**
+/*!
* handleImageData: Image data received from ECam
*/
void CxeStillCaptureControlSymbian::handleImageData(MCameraBuffer* cameraBuffer, int error)
@@ -638,8 +546,15 @@
QByteArray byteArray( reinterpret_cast<const char*>( data->Ptr() ), data->Size() );
data = NULL;
+ // get geotagging setting value and check if we have to add location trail to image data.
+ int value = Cxe::GeoTaggingOff;
+ mSettings.get(CxeSettingIds::GEOTAGGING, value);
+
// Save the image data
- CxeImageDataItemSymbian* dataItem = mImageDataQueue->startSave(byteArray, stillImage->filename(), stillImage->id());
+ CxeImageDataItemSymbian* dataItem = mImageDataQueue->startSave(byteArray,
+ stillImage->filename(),
+ stillImage->id(),
+ value == Cxe::GeoTaggingOn);
stillImage->setDataItem(dataItem);
mFileSaveThread.save(dataItem); // Saving thread takes ownership of dataItem.
}
@@ -660,7 +575,7 @@
}
-/**
+/*!
* Settings changed, needs updated
*/
void CxeStillCaptureControlSymbian::handleSettingValueChanged(const QString& settingId, QVariant newValue)
@@ -705,7 +620,7 @@
CX_DEBUG_EXIT_FUNCTION();
}
-/**
+/*!
* ECam reference changing, release resources
*/
void CxeStillCaptureControlSymbian::prepareForCameraDelete()
@@ -715,7 +630,7 @@
CX_DEBUG_EXIT_FUNCTION();
}
-/**
+/*!
* Camera being released. Cancel ongoing capture, if any.
*/
void CxeStillCaptureControlSymbian::prepareForRelease()
@@ -725,7 +640,7 @@
CX_DEBUG_EXIT_FUNCTION();
}
-/**
+/*!
* New camera available,
*/
void CxeStillCaptureControlSymbian::handleCameraAllocated(CxeError::Id error)
@@ -759,7 +674,7 @@
CX_DEBUG_EXIT_FUNCTION();
}
-/**
+/*!
* Return number of images captured (during current capture operation only).
*/
int CxeStillCaptureControlSymbian::imageCount() const
@@ -767,7 +682,7 @@
return mImages.count();
}
-/**
+/*!
* Reset the image array.
*/
void CxeStillCaptureControlSymbian::reset()
@@ -783,7 +698,7 @@
CX_DEBUG_EXIT_FUNCTION();
}
-/**
+/*!
* This should cancel any ongoing image captures.
*/
void CxeStillCaptureControlSymbian::cancelAll()
@@ -792,7 +707,7 @@
reset();
}
-/**
+/*!
* Sets the current capture mode: SingleImageCapture / BurstCapture.
*/
void CxeStillCaptureControlSymbian::setMode( CaptureMode mode )
@@ -800,7 +715,7 @@
mMode = mode;
}
-/**
+/*!
* Returns the current capture mode.
*/
CxeStillCaptureControl::CaptureMode CxeStillCaptureControlSymbian::mode() const
@@ -808,7 +723,7 @@
return mMode;
}
-/**
+/*!
* Operator [] - returns the indexed image from capture array.
*/
CxeStillImage &CxeStillCaptureControlSymbian::operator[]( int index )
@@ -816,7 +731,7 @@
return *mImages[ index ];
}
-/**
+/*!
* Getter for image data queue.
*/
CxeImageDataQueue &CxeStillCaptureControlSymbian::imageDataQueue()
@@ -824,7 +739,7 @@
return *mImageDataQueue;
}
-/**
+/*!
* Generates a filename and sets it in the still image object.
* Skips the process if filename already copied exists in the object. This
* behaviour is required in rare cases where image data arrives before snapshot.
@@ -832,6 +747,8 @@
CxeError::Id
CxeStillCaptureControlSymbian::prepareFilename(CxeStillImageSymbian *stillImage)
{
+ OstTrace0(camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_PREPAREFILENAME_1, "msg: e_CX_PREPARE_FILENAME 1" );
+
CxeError::Id err = CxeError::None;
if (stillImage->filename().isEmpty()) {
QString path;
@@ -855,6 +772,8 @@
CX_DEBUG(("ERROR in filename generation. err:%d", err));
}
}
+
+ OstTrace0(camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_PREPAREFILENAME_2, "msg: e_CX_PREPARE_FILENAME 0" );
return err;
}
@@ -887,7 +806,7 @@
CX_DEBUG_EXIT_FUNCTION();
}
-/**
+/*!
* Get the image container at given index or create a new one if needed.
*/
CxeStillImageSymbian* CxeStillCaptureControlSymbian::getImageForIndex(int index)
@@ -921,8 +840,7 @@
// if focused and in correct mode, play sound
if (newState == CxeAutoFocusControl::Ready &&
- mode != CxeAutoFocusControl::Hyperfocal &&
- mode != CxeAutoFocusControl::Infinity &&
+ !mAutoFocusControl.isFixedFocusMode(mode) &&
mAutoFocusControl.isSoundEnabled()) {
mAutoFocusSoundPlayer->play();
}
--- a/camerauis/cameraxui/cxengine/src/cxesysutil.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxesysutil.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -154,12 +154,6 @@
CX_DEBUG(("status getting volume info: %d", status));
qt_symbian_throwIfError(status);
- CX_DEBUG(("TVolumeInfo.iDrive.iType: %d", volumeInfo.iDrive.iType));
- CX_DEBUG((" EMediaNotPresent: %d", EMediaNotPresent));
- CX_DEBUG((" EMediaUnknown: %d", EMediaUnknown));
- CX_DEBUG(("TVolumeInfo.iDrive.iMediaAtt: %d", volumeInfo.iDrive.iMediaAtt));
- CX_DEBUG((" KMediaAttLocked: %d", KMediaAttLocked));
-
// Get critical treshold for free space on the drive.
// We must leave the free space above this.
QVariant criticalThreshold;
@@ -174,6 +168,7 @@
freeSpace = 0;
}
+ CX_DEBUG(("CxeSysUtil - free space: %d", freeSpace));
CX_DEBUG_EXIT_FUNCTION();
return freeSpace;
}
--- a/camerauis/cameraxui/cxengine/src/cxethumbnailmanagersymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxethumbnailmanagersymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -21,7 +21,7 @@
#include "cxutils.h"
#include "cxethumbnailmanagersymbian.h"
-//#define CXE_USE_THUMBNAIL_MANAGER
+
/*!
@@ -31,14 +31,11 @@
{
CX_DEBUG_ENTER_FUNCTION();
-#ifdef CXE_USE_THUMBNAIL_MANAGER
-
mThumbnailManager = new ThumbnailManager();
// connect thumbnail ready signal from thumbnailmanager
connect(mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void *, int, int)),
this, SLOT(thumbnailReady(QPixmap, void *, int, int)));
-#endif
CX_DEBUG_EXIT_FUNCTION();
}
@@ -51,10 +48,8 @@
{
CX_DEBUG_ENTER_FUNCTION();
-#ifdef CXE_USE_THUMBNAIL_MANAGER
mThumbnailRequests.clear();
delete mThumbnailManager;
-#endif
CX_DEBUG_EXIT_FUNCTION();
}
@@ -66,20 +61,17 @@
@param filename - name of the image/video filename
@param snapshot - snapshot data from image/video
*/
-void CxeThumbnailManagerSymbian::createThumbnail(const QString& filename,
- QPixmap /*snapshot*/)
+void CxeThumbnailManagerSymbian::createThumbnail(const QString &filename,
+ const QImage &snapshot)
{
CX_DEBUG_ENTER_FUNCTION();
-#ifdef CXE_USE_THUMBNAIL_MANAGER
TPtrC16 fName(reinterpret_cast<const TUint16*>(filename.utf16()));
CX_DEBUG(("Create thumbnail! filename = %s", filename.toAscii().constData()));
if (mThumbnailManager) {
CX_DEBUG(("creating thumbnails"));
- //!@todo Thumbnail manager interface needs to be changed to use QImage
- // instead of QPixmap for setThumbnail. Until then, using qetThumbnail.
- int thumbnailId = mThumbnailManager->getThumbnail(filename, 0);
+ int thumbnailId = mThumbnailManager->setThumbnail(snapshot, filename);
if (thumbnailId != -1) {
CX_DEBUG(("Thumbnail ID = %d", thumbnailId));
mThumbnailRequests.insert(filename, thumbnailId);
@@ -87,9 +79,6 @@
CX_DEBUG(("error initializing data to thumbnail manager"));
}
}
-#else
- Q_UNUSED(filename);
-#endif
CX_DEBUG_EXIT_FUNCTION();
}
@@ -103,7 +92,6 @@
{
CX_DEBUG_ENTER_FUNCTION();
-#ifdef CXE_USE_THUMBNAIL_MANAGER
if (mThumbnailRequests.contains(filename)) {
int thumbnailId = mThumbnailRequests.value(filename);
if (mThumbnailManager &&
@@ -112,9 +100,7 @@
mThumbnailRequests.remove(filename);
}
}
-#else
- Q_UNUSED(filename);
-#endif
+
CX_DEBUG_EXIT_FUNCTION();
}
@@ -131,8 +117,9 @@
CX_DEBUG_ENTER_FUNCTION();
+ Q_UNUSED(thumbnail);
Q_UNUSED(data);
-#ifdef CXE_USE_THUMBNAIL_MANAGER
+
CX_DEBUG(("CxeThumbnailManagerSymbian::thumbnailReady error = %d", error));
QString key;
@@ -149,13 +136,7 @@
if (mThumbnailRequests.contains(key)) {
CX_DEBUG(("Thumbnail created for filename = %s", key.toAscii().constData()));
mThumbnailRequests.remove(key);
- emit thumbnailReady(thumbnail, error);
}
-#else
- Q_UNUSED(thumbnail);
- Q_UNUSED(id);
- Q_UNUSED(error);
-#endif
CX_DEBUG_EXIT_FUNCTION();
}
--- a/camerauis/cameraxui/cxengine/src/cxevideocapturecontrolsymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxevideocapturecontrolsymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -14,19 +14,22 @@
* Description:
*
*/
+
+#include <algorithm>
+#include <exception>
#include <QTime>
-#include <fbs.h>
#include <QPixmap>
#include <coemain.h>
#include <QStringList>
-#include <AudioPreference.h>
+#include "cxeexception.h"
#include "cxevideocapturecontrolsymbian.h"
#include "cxevideorecorderutilitysymbian.h"
#include "cxecameradevicecontrolsymbian.h"
#include "cxefilenamegeneratorsymbian.h"
#include "cxeerrormappingsymbian.h"
#include "cxeviewfindercontrol.h"
+#include "cxesnapshotcontrol.h"
#include "cxestillimagesymbian.h"
#include "cxecameradevice.h"
#include "cxutils.h"
@@ -47,26 +50,11 @@
// constants
namespace
{
- // Controller UId, can be used by the client to identify the controller, e.g. if the custom command can be used
- const TUid KCamCControllerImplementationUid = {0x101F8503};
// TMMFEvent UIDs for Async stop
const TUid KCamCControllerCCVideoRecordStopped = {0x2000E546};
const TUid KCamCControllerCCVideoFileComposed = {0x2000E547};
- // Custom command for setting a new filename without closing & reopening the controller
- enum TCamCControllerCustomCommands
- {
- ECamCControllerCCNewFilename = 0,
- ECamCControllerCCVideoStopAsync
- };
-
- const TInt KOneSecond = 1000000;
- const int KMaintainAspectRatio = false;
const TInt64 KMinRequiredSpaceVideo = 4000000;
- const uint KOneMillion = 1000000;
- const qreal KMetaDataCoeff = 1.03; // Coefficient to estimate metadata amount
- const uint KCamCMaxClipDurationInSecs = 5400; // Maximun video clip duration in seconds
- const qreal KCMRAvgVideoBitRateScaler = 0.9; // avg video bit rate scaler
}
@@ -76,6 +64,7 @@
CxeVideoCaptureControlSymbian::CxeVideoCaptureControlSymbian(
CxeCameraDevice &cameraDevice,
CxeViewfinderControl &viewfinderControl,
+ CxeSnapshotControl &snapshotControl,
CxeCameraDeviceControl &cameraDeviceControl,
CxeFilenameGenerator &nameGenerator,
CxeSettings &settings,
@@ -86,12 +75,14 @@
mCameraDevice(cameraDevice),
mCameraDeviceControl(cameraDeviceControl),
mViewfinderControl(viewfinderControl),
+ mSnapshotControl(snapshotControl),
mFilenameGenerator(nameGenerator),
mSettings(settings),
mQualityPresets(qualityPresets),
mDiskMonitor(diskMonitor),
mSnapshot(),
- mNewFileName(""),
+ mVideoStartSoundPlayer(NULL),
+ mVideoStopSoundPlayer(NULL),
mCurrentFilename("")
{
CX_DEBUG_ENTER_FUNCTION();
@@ -101,9 +92,11 @@
initializeStates();
mVideoStopSoundPlayer = new
- CxeSoundPlayerSymbian(CxeSoundPlayerSymbian::VideoCaptureStop);
+ CxeSoundPlayerSymbian(CxeSoundPlayerSymbian::VideoCaptureStop,
+ mSettings);
mVideoStartSoundPlayer = new
- CxeSoundPlayerSymbian(CxeSoundPlayerSymbian::VideoCaptureStart);
+ CxeSoundPlayerSymbian(CxeSoundPlayerSymbian::VideoCaptureStart,
+ mSettings);
// If camera is already allocated, call the slot ourselves.
if (mCameraDevice.camera()) {
@@ -118,23 +111,26 @@
this, SLOT(prepareForRelease()) );
connect(&cameraDevice, SIGNAL(cameraAllocated(CxeError::Id)),
this, SLOT(handleCameraAllocated(CxeError::Id)));
+
// connect playing sound signals
connect(mVideoStartSoundPlayer, SIGNAL(playComplete(int)),
this, SLOT(handleSoundPlayed()));
+ // connect snapshot ready signal
+ connect(&mSnapshotControl, SIGNAL(snapshotReady(CxeError::Id, const QImage&)),
+ this, SLOT(handleSnapshotReady(CxeError::Id, const QImage&)));
+
// enabling setting change callbacks to videocapturecontrol
connect(&mSettings, SIGNAL(settingValueChanged(const QString&,QVariant)),
this, SLOT(handleSettingValueChanged(const QString&,QVariant)));
-
- connect(&mSettings, SIGNAL(sceneChanged(CxeScene&)), this, SLOT(handleSceneChanged(CxeScene&)));
-
+ connect(&mSettings, SIGNAL(sceneChanged(CxeScene&)),
+ this, SLOT(handleSceneChanged(CxeScene&)));
OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROLSYMBIAN_CREATE_M2, "msg: e_CX_ENGINE_CONNECT_SIGNALS 0");
OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROLSYMBIAN_CREATE_OUT, "msg: e_CX_VIDEOCAPTURECONTROL_NEW 0");
CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
* CxeVideoCaptureControlSymbian::~CxeVideoCaptureControlSymbian()
*/
@@ -150,7 +146,6 @@
CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
* Initializes resources for video recording.
*/
@@ -168,51 +163,47 @@
}
OstTrace0( camerax_performance, DUP1_CXEVIDEOCAPTURECONTROLSYMBIAN_INIT, "msg: e_CX_VIDEO_CAPCONT_INIT 0" );
-
CX_DEBUG_EXIT_FUNCTION();
}
-
-/*
+/*!
* Releases all resources
*/
void CxeVideoCaptureControlSymbian::deinit()
{
CX_DEBUG_ENTER_FUNCTION();
- if(state() == Idle) {
- // nothing to do
- return;
- }
+ // Nothing to do if already idle.
+ if(state() != Idle) {
+ OstTrace0( camerax_performance, CXEVIDEOCAPTURECONTROLSYMBIAN_DEINIT, "msg: e_CX_VIDEO_CAPCONT_DEINIT 1" );
- OstTrace0( camerax_performance, CXEVIDEOCAPTURECONTROLSYMBIAN_DEINIT, "msg: e_CX_VIDEO_CAPCONT_DEINIT 1" );
+ // first stop viewfinder
+ mViewfinderControl.stop();
- // first stop viewfinder
- mViewfinderControl.stop();
-
- // stop video-recording in-case if its ongoing.
- stop();
+ // stop video-recording in-case if its ongoing.
+ stop();
- if (mCameraDevice.cameraSnapshot()) {
- mCameraDevice.cameraSnapshot()->StopSnapshot();
- }
-
- if (mVideoRecorder) {
- mVideoRecorder->Close();
- }
+ // Check if state is stopping, in which case we have to inform the
+ // file harvester that a file is to be completed. We would not
+ // call harvestFile otherwise in this case.
+ // Otherwise the video will not be found from videos app.
+ if (state() == Stopping) {
+ emit videoComposed(CxeError::None, mCurrentFilename);
+ }
- // revert back the new filename to empty string so that we generate a new file name
- // when we init again
- mNewFileName = QString("");
+ mSnapshotControl.stop();
- setState(Idle);
+ if (mVideoRecorder) {
+ mVideoRecorder->close();
+ }
- OstTrace0( camerax_performance, DUP1_CXEVIDEOCAPTURECONTROLSYMBIAN_DEINIT, "msg: e_CX_VIDEO_CAPCONT_DEINIT 0" );
+ setState(Idle);
+ OstTrace0( camerax_performance, DUP1_CXEVIDEOCAPTURECONTROLSYMBIAN_DEINIT, "msg: e_CX_VIDEO_CAPCONT_DEINIT 0" );
+ }
CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
* Intializes VideoRecorder for recording.
*/
@@ -220,52 +211,28 @@
{
CX_DEBUG_ENTER_FUNCTION();
- if (state() != Idle) {
- // not valid state to start "open" operation
- return;
- }
-
- if(!mVideoRecorder) {
- // if video recorder is not created, do it now.
- createVideoRecorder();
- }
-
- // update current video quality details from icm
- CxeError::Id err = getVideoQualityDetails(mCurrentVideoDetails);
+ // Init needed only in Idle state
+ if (state() == Idle) {
+ try {
+ // if video recorder is not created, do it now.
+ createVideoRecorder();
- if (!err) {
- // read videofile mime type
- QByteArray videoFileData =
- mCurrentVideoDetails.mVideoFileMimeType.toLatin1();
- TPtrC8 videoFileMimeType(reinterpret_cast<const TUint8*>
- (videoFileData.constData()), videoFileData.size());
+ // update current video quality details from icm.
+ // Throws an error if unable to get the quality.
+ getVideoQualityDetails(mCurrentVideoDetails);
- // read preferred supplier
- TPtrC16 supplier(reinterpret_cast<const TUint16*>
- (mCurrentVideoDetails.mPreferredSupplier.utf16()));
-
- err = findVideoController(videoFileMimeType, supplier);
-
- if (!err) {
- // video recorder is ready to open video file for recording.
+ // Video recorder is ready to open video file for recording.
setState(Initialized);
open();
+ } catch (const std::exception &e) {
+ // Handle error
+ handlePrepareFailed();
}
- } else {
- err = CxeErrorHandlingSymbian::map(KErrNotReady);
- }
-
- if (err) {
- // In case of error
- emit videoPrepareComplete(err);
- deinit();
}
CX_DEBUG_EXIT_FUNCTION();
}
-
-
/*!
* Opens file for video recording.
*/
@@ -273,92 +240,53 @@
{
CX_DEBUG_ENTER_FUNCTION();
- if (state() != Initialized) {
- // not valid state to start "open" operation
- return;
- }
-
- CxeError::Id err = CxeError::None;
+ // Check valid state to start "open" operation
+ if (state() == Initialized) {
+ try {
+ // generate video file name, if necessary
+ generateFilename();
+ CX_DEBUG(( "Next video file path: %s", mCurrentFilename.toAscii().constData() ));
- // generate video file name, if necessary
- if (mNewFileName.isEmpty()) {
- QStringList list = mCurrentVideoDetails.mVideoFileMimeType.split("/");
- QString fileExt(".");
- if (list.count() == 2) {
- fileExt = fileExt + list[1];
- }
- // Generate new filename and open the file for writing video data
- err = mFilenameGenerator.generateFilename(mNewFileName, fileExt);
- if (err == CxeError::None) {
- mCurrentFilename = mNewFileName;
- } else {
- // file name is not valid, re-initialize the value of current string
- // back to empty string
- mCurrentFilename = QString("");
- }
- }
+ // Start preparing..
+ setState(CxeVideoCaptureControl::Preparing);
- if (!err &&
- mVideoRecorder &&
- !mCurrentFilename.isEmpty()) {
-
- TPtrC16 fName(reinterpret_cast<const TUint16*>(mCurrentFilename.utf16()));
- CX_DEBUG(( "Next video file path: %s", mCurrentFilename.toAscii().constData() ));
-
- // read video codec mime type
- QByteArray videoCodecData =
- mCurrentVideoDetails.mVideoCodecMimeType.toLatin1();
- TPtrC8 videoCodecMimeType(reinterpret_cast<const TUint8*>
- (videoCodecData.constData()), videoCodecData.size());
-
- setState(CxeVideoCaptureControl::Preparing);
-
- TRAPD(openErr, mVideoRecorder->OpenFileL(fName,
- mCameraDevice.camera()->Handle(),
- mVideoControllerUid,
- mVideoFormatUid,
- videoCodecMimeType,
- audioType(mCurrentVideoDetails.mAudioType)));
-
- err = CxeErrorHandlingSymbian::map(openErr);
- }
- if (err) {
- // error occured.
- deinit();
- emit videoPrepareComplete(err);
+ // Exception thrown if open fails.
+ mVideoRecorder->open(mCameraDevice.camera()->Handle(),
+ mCurrentFilename,
+ mCurrentVideoDetails.mVideoFileMimeType,
+ mCurrentVideoDetails.mPreferredSupplier,
+ mCurrentVideoDetails.mVideoCodecMimeType,
+ mCurrentVideoDetails.mAudioType);
+ } catch (const std::exception &e) {
+ handlePrepareFailed();
+ }
}
CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
-* Prepare Video Recorder with necessary settings for video capture.
+* Helper method for generating filename.
+* Throws exception, if file type mime is formatted wrong or
+* filename generation fails.
*/
-TFourCC CxeVideoCaptureControlSymbian::audioType(const QString& str)
+void CxeVideoCaptureControlSymbian::generateFilename()
{
CX_DEBUG_ENTER_FUNCTION();
-
- QByteArray audioType = str.toAscii();
-
- quint8 char1(' ');
- quint8 char2(' ');
- quint8 char3(' ');
- quint8 char4(' ');
+ mCurrentFilename = QString("");
- if (audioType.count() > 3) {
- char1 = audioType[0];
- char2 = audioType[1];
- char3 = audioType[2];
+ QStringList list = mCurrentVideoDetails.mVideoFileMimeType.split("/");
+ // Throw exception if mime string is formatted wrong.
+ if (list.count() != 2) {
+ throw new CxeException(CxeError::General);
+ }
+ QString fileExt = "." + list[1];
- if (audioType.count() == 4) {
- char4 = audioType[3];
- }
- }
+ // Generate new filename and open the file for writing video data
+ CxeException::throwIfError(mFilenameGenerator.generateFilename(mCurrentFilename, fileExt));
- return TFourCC(char1, char2, char3, char4);
+ CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
* Prepare Video Recorder with necessary settings for video capture.
*/
@@ -371,13 +299,8 @@
return;
}
- CX_DEBUG(("Video resoulution (%d,%d)", mCurrentVideoDetails.mWidth,
- mCurrentVideoDetails.mHeight));
- CX_DEBUG(("Video bitrate = %d)", mCurrentVideoDetails.mVideoBitRate));
-
- OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROLSYMBIAN_PREPARE, "msg: e_CX_VIDCAPCONT_PREPARE 1");
- TSize frameSize;
- frameSize.SetSize(mCurrentVideoDetails.mWidth, mCurrentVideoDetails.mHeight);
+ OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROL_PREPARE_1, "msg: e_CX_VIDCAPCONT_PREPARE 1");
+ QSize frameSize(mCurrentVideoDetails.mWidth, mCurrentVideoDetails.mHeight);
int muteSetting = 0; // audio enabled
mSettings.get(CxeSettingIds::VIDEO_MUTE_SETTING, muteSetting);
@@ -390,227 +313,67 @@
frameRate = mCurrentVideoDetails.mVideoFrameRate;
}
+ CX_DEBUG(("Video resolution (%d,%d)", mCurrentVideoDetails.mWidth,
+ mCurrentVideoDetails.mHeight));
+ CX_DEBUG(("Video bitrate = %d)", mCurrentVideoDetails.mVideoBitRate));
CX_DEBUG(("Video frame rate = %d)", frameRate));
- TRAPD(err,
- {
- mVideoRecorder->SetVideoFrameSizeL(frameSize);
- mVideoRecorder->SetVideoFrameRateL(frameRate);
- mVideoRecorder->SetVideoBitRateL(mCurrentVideoDetails.mVideoBitRate);
- mVideoRecorder->SetAudioEnabledL(muteSetting == 0);
- // "No limit" value is handled in video recorder wrapper.
- mVideoRecorder->SetMaxClipSizeL(mCurrentVideoDetails.mMaximumSizeInBytes);
- }
- );
+ try {
+ mVideoRecorder->setVideoFrameSize(frameSize);
+ mVideoRecorder->setVideoFrameRate(frameRate);
+ mVideoRecorder->setVideoBitRate(mCurrentVideoDetails.mVideoBitRate);
+ mVideoRecorder->setAudioEnabled(muteSetting == 0);
+ // "No limit" value is handled in video recorder wrapper.
+ mVideoRecorder->setVideoMaxSize(mCurrentVideoDetails.mMaximumSizeInBytes);
+
+ // Settings have been applied successfully, start to prepare.
+ mVideoRecorder->prepare();
- if (!err) {
- // settings have been applied successfully, start to prepare
- mVideoRecorder->Prepare();
- // prepare snapshot
- err = prepareVideoSnapshot();
+ // Prepare snapshot. Snapshot control throws error if problems.
+ QSize snapshotSize = mSnapshotControl.calculateSnapshotSize(
+ mViewfinderControl.deviceDisplayResolution(),
+ mCurrentVideoDetails.mAspectRatio);
+ mSnapshotControl.start(snapshotSize);
+
+ // Prepare zoom only when there are no errors during prepare.
+ emit prepareZoomForVideo();
+ emit videoPrepareComplete(CxeError::None);
+ } catch (const std::exception &e) {
+ // Handle error.
+ handlePrepareFailed();
}
- if (!err) {
- // prepare zoom only when there are no errors during prepare.
- emit prepareZoomForVideo();
- }
- // emit video prepare status
- emit videoPrepareComplete(CxeErrorHandlingSymbian::map(err));
-
- OstTrace0(camerax_performance, DUP1_CXEVIDEOCAPTURECONTROLSYMBIAN_PREPARE, "msg: e_CX_VIDCAPCONT_PREPARE 0");
-
+ OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROL_PREPARE_2, "msg: e_CX_VIDCAPCONT_PREPARE 0");
CX_DEBUG_EXIT_FUNCTION();
}
-
-
/*!
-Fetches video qualites details based on video quality setting.
-Returns CxeError codes if any.
+* Fetches video qualites details based on video quality setting.
*/
-CxeError::Id
+void
CxeVideoCaptureControlSymbian::getVideoQualityDetails(CxeVideoDetails &videoInfo)
{
CX_DEBUG_ENTER_FUNCTION();
-
- int videoQuality = 0;
- CxeError::Id err = CxeError::None;
-
- if (mCameraDeviceControl.cameraIndex() == Cxe::PrimaryCameraIndex) {
- err = mSettings.get(CxeSettingIds::VIDEO_QUALITY, videoQuality);
+ OstTrace0( camerax_performance, CXEVIDEOCAPTURECONTROL_GETQUALITYDETAILS_1, "msg: e_CX_GET_QUALITY_DETAILS 1" );
- bool validQuality = (videoQuality >= 0 &&
- videoQuality < mIcmSupportedVideoResolutions.count());
- if (err == CxeError::None && validQuality) {
- // get video quality details
- videoInfo = mIcmSupportedVideoResolutions.at(videoQuality);
- } else {
- // not valid video quality
- err = CxeError::NotFound;
- }
- } else {
- // get secondary camera video quality index
- if (mIcmSupportedVideoResolutions.count() > 0) {
- videoInfo = mIcmSupportedVideoResolutions.at(videoQuality);
- } else {
- // not valid video quality
- err = CxeError::NotFound;
- }
- }
-
- CX_DEBUG_EXIT_FUNCTION();
-
- return err;
-}
-
+ int quality(0);
-/**!
- Prepare snapshot
- Returns symbian error code.
- */
-int CxeVideoCaptureControlSymbian::prepareVideoSnapshot()
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- CCamera::CCameraSnapshot *cameraSnapshot = mCameraDevice.cameraSnapshot();
- CX_ASSERT_ALWAYS(cameraSnapshot);
-
- int err = KErrNone;
- // Whether or not we have postcapture on, we need the snapshot for Thumbnail Manager.
- if (cameraSnapshot) {
- // Cancel active snapshot
- cameraSnapshot->StopSnapshot();
-
- // Prepare snapshot
- CCamera::TFormat snapFormat = CCamera::EFormatFbsBitmapColor16MU;
- TRAP(err, cameraSnapshot->PrepareSnapshotL(snapFormat,
- getSnapshotSize(),
- KMaintainAspectRatio));
- CX_DEBUG(("PrepareSnapshotL done, err=%d", err));
- // Start snapshot if no errors encountered.
- if (err == KErrNone) {
- CX_DEBUG(("Start video snapshot"));
- cameraSnapshot->StartSnapshot();
- }
- } else {
- // No snapshot interface available. Report error.
- // Assert above takes care of this, but keeping this as an option.
- err = KErrNotReady;
+ // Get quality index for primary camera. Only one quality for secondary camera.
+ if (mCameraDeviceControl.cameraIndex() == Cxe::PrimaryCameraIndex) {
+ CxeException::throwIfError(mSettings.get(CxeSettingIds::VIDEO_QUALITY, quality));
}
- CX_DEBUG_EXIT_FUNCTION();
-
- return err;
-}
-
-
-
-/*!
-* Returns snapshot size. Snapshot size is calculated based on the
-* display resolution and current video aspect ratio.
-*/
-TSize CxeVideoCaptureControlSymbian::getSnapshotSize() const
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- TSize snapshotSize;
-
- QSize deviceResolution = mViewfinderControl.deviceDisplayResolution();
- QSize size = QSize(mCurrentVideoDetails.mWidth, mCurrentVideoDetails.mHeight);
+ if (quality < 0 || quality >= mIcmSupportedVideoResolutions.count()) {
+ throw new CxeException(CxeError::NotFound);
+ }
- // scale according to aspect ratio.
- size.scale(deviceResolution.width(),
- deviceResolution.height(),
- Qt::KeepAspectRatio);
- CX_DEBUG(("Video Snapshot size, (%d,%d)", size.width(), size.height()));
- snapshotSize.SetSize(size.width(), deviceResolution.height());
-
- CX_DEBUG_EXIT_FUNCTION();
-
- return snapshotSize;
-}
+ // get video quality details
+ videoInfo = mIcmSupportedVideoResolutions.at(quality);
-
-
-/**!
-* Camera events coming from ecam.
-*/
-void CxeVideoCaptureControlSymbian::handleCameraEvent(int eventUid, int error)
-{
- CX_DEBUG_ENTER_FUNCTION();
- if (eventUid == KUidECamEventSnapshotUidValue) {
- handleSnapshotEvent(CxeErrorHandlingSymbian::map(error));
- }
+ OstTrace0( camerax_performance, CXEVIDEOCAPTURECONTROL_GETQUALITYDETAILS_2, "msg: e_CX_GET_QUALITY_DETAILS 0" );
CX_DEBUG_EXIT_FUNCTION();
}
-
-/*!
-* Handle Snapshot event from ecam
-*/
-void CxeVideoCaptureControlSymbian::handleSnapshotEvent(CxeError::Id error)
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- if (state() == Idle) {
- // we ignore this event, when we are not in active state(s)
- CX_DEBUG(( "wrong state, ignoring snapshot" ));
- CX_DEBUG_EXIT_FUNCTION();
- return;
- }
-
- if (error) {
- mSnapshot = QPixmap();
- emit snapshotReady(error, mSnapshot, filename());
- return;
- }
-
- RArray<TInt> snapList;
- MCameraBuffer* buffer(NULL);
- // Note: Cleanup not required in this function
- CFbsBitmap *snapshot = NULL;
- TRAPD(snapErr,
- buffer = &mCameraDevice.cameraSnapshot()->SnapshotDataL(snapList));
- if (!snapErr) {
- TInt firstImageIndex = snapList.Find(0);
- snapList.Close();
- TRAP(snapErr, snapshot = &(buffer->BitmapL(firstImageIndex)));
- }
- if (!snapErr) {
- TSize size = snapshot->SizeInPixels();
- TInt sizeInWords = size.iHeight * CFbsBitmap::ScanLineLength(size.iWidth, EColor16MU)
- / sizeof(TUint32);
-
- TUint32 *snapshotData = NULL;
- snapshotData = new TUint32[sizeInWords];
-
- if (snapshotData) {
- // Convert to QImage
- snapshot->LockHeap();
- TUint32* dataPtr = snapshot->DataAddress();
- memcpy(snapshotData, dataPtr, sizeof(TUint32) * sizeInWords);
- snapshot->UnlockHeap();
-
-
- QImage *img = new QImage((uchar*) snapshotData, size.iWidth, size.iHeight,
- CFbsBitmap::ScanLineLength(size.iWidth, EColor16MU),
- QImage::Format_RGB32);
-
- mSnapshot = QPixmap::fromImage(*img);
- delete [] snapshotData;
- delete img;
- }
- }
- if (buffer) {
- buffer->Release();
- }
- // Snapshot ready
- emit snapshotReady(CxeErrorHandlingSymbian::map(snapErr), mSnapshot, filename());
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-
/*!
* Resets the video snapshot and current video filename
*/
@@ -627,7 +390,6 @@
CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
* Returns current video filename
*/
@@ -639,7 +401,6 @@
return mCurrentFilename;
}
-
/*!
* Returns current video snapshot
*/
@@ -648,7 +409,6 @@
return mSnapshot;
}
-
/*!
* Starts video recording if we are in appropriate state.
*/
@@ -666,30 +426,23 @@
CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
* Pauses video recording.
*/
void CxeVideoCaptureControlSymbian::pause()
{
CX_DEBUG_ENTER_FUNCTION();
-
- setState(CxeVideoCaptureControl::Paused);
- TRAPD(pauseErr, mVideoRecorder->PauseL());
- // play the sound, but not changing the state
- mVideoStopSoundPlayer->play();
- if (pauseErr) {
- CX_DEBUG(("[WARNING] Error %d pausing!", pauseErr));
- //pause operation failed, report it
- emit videoComposed(CxeErrorHandlingSymbian::map(pauseErr), filename());
- // release resources.
- deinit();
+ try {
+ mVideoRecorder->pause();
+ setState(CxeVideoCaptureControl::Paused);
+ // play the sound, but not changing the state
+ mVideoStopSoundPlayer->play();
+ } catch (const std::exception &e) {
+ handleComposeFailed(qt_symbian_exception2Error(e));
}
-
CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
* Stops video recording.
*/
@@ -701,35 +454,28 @@
// first stop viewfinder
mViewfinderControl.stop();
- TInt asyncStopErr = mVideoRecorder->CustomCommandSync(
- TMMFMessageDestination(KCamCControllerImplementationUid,
- KMMFObjectHandleController),
- ECamCControllerCCVideoStopAsync,
- KNullDesC8,
- KNullDesC8 );
- CX_DEBUG(("ECamCControllerCCVideoStopAsync sent, err=%d", asyncStopErr));
- if (asyncStopErr) { // fall back to synchronous stop
- TInt syncStopErr = mVideoRecorder->Stop();
- if (syncStopErr) {
- // error during stop operation, release resources
- emit videoComposed(CxeErrorHandlingSymbian::map(asyncStopErr), filename());
- deinit();
- } else {
- // stop operation went fine, set back the state to Initialized.
- setState(Initialized);
- mFilenameGenerator.raiseCounterValue();
+ try {
+ // Try asynchronous stopping first.
+ mVideoRecorder->stop(true);
+ // No error from asynchronous stop -> wait for stop event
+ setState(Stopping);
+ } catch (const std::exception &e) {
+ CX_DEBUG(("CxeVideoCaptureControlSymbian - async stop failed, try sync.."));
+ try {
+ mVideoRecorder->stop(false);
+ // stopping went ok
+ emulateNormalStopping();
+ } catch (const std::exception &e) {
+ // Even synchronous stopping failed -> release resources.
+ CX_DEBUG(("CxeVideoCaptureControlSymbian - sync stop failed, too!"));
+ handleComposeFailed(qt_symbian_exception2Error(e));
}
- } else {
- // No error from asynch stop custom command... wait for stop event
- setState(Stopping);
- mFilenameGenerator.raiseCounterValue();
}
}
CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
* Callback when "Open" operation is complete.
*/
@@ -739,20 +485,16 @@
CX_DEBUG(("CxeVideoCaptureControlSymbian::MvruoOpenComplete, err=%d", aError));
if (state() == Preparing) {
- if (aError != KErrNone) {
- deinit();
- CxeError::Id err = CxeErrorHandlingSymbian::map(KErrNotReady);
- // report error to interested parties
- emit videoPrepareComplete(CxeErrorHandlingSymbian::map(err));
+ if (!aError) {
+ prepare();
} else {
- prepare();
+ handlePrepareFailed();
}
}
CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
* Callback when "Prepare" request is complete.
*/
@@ -767,17 +509,13 @@
mViewfinderControl.start();
OstTrace0( camerax_performance, CXEVIDEOCAPTURECONTROLSYMBIAN_GOTOVIDEO, "msg: e_CX_GO_TO_VIDEO_MODE 0" );
} else {
- deinit();
- // report error to interested parties
- CxeError::Id err = CxeErrorHandlingSymbian::map(KErrNotReady);
- emit videoPrepareComplete(CxeErrorHandlingSymbian::map(err));
+ handlePrepareFailed();
}
}
CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
* Callback when "Record" operation is complete.
*/
@@ -793,20 +531,16 @@
// KErrCompletion is received when video recording stops
// because of maximum clip size is reached. Emulate
// normal stopping.
- setState(Stopping);
- MvruoEvent(TMMFEvent(KCamCControllerCCVideoRecordStopped, KErrNone));
- MvruoEvent(TMMFEvent(KCamCControllerCCVideoFileComposed, KErrNone));
+ emulateNormalStopping();
}
else {
// error during recording, report to client
- deinit();
- emit videoComposed(CxeErrorHandlingSymbian::map(aError), filename());
+ handleComposeFailed(aError);
}
CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
* Callback from MVideoRecorderUtilityObserver
*/
@@ -824,11 +558,9 @@
// stop operation went fine, set back the state to intialized.
setState(Initialized);
}
+ mFilenameGenerator.raiseCounterValue();
// video file has composed, everything went well, inform the client
emit videoComposed(CxeError::None, filename());
- // revert back the new filename to empty string, since recording
- // is complete and we need to generate a new file name
- mNewFileName = QString("");
} else {
CX_DEBUG(("ignoring unknown MvruoEvent 0x%08x", aEvent.iEventType.iUid ));
}
@@ -836,85 +568,6 @@
CX_DEBUG_EXIT_FUNCTION();
}
-
-/*!
-Get corresponding controller for video capture.
-@param aMimeType denotes videofile mimetype,
-@param aPreferredSupplier denotes supplier.
-Returns CxeError::Id if any.
-*/
-CxeError::Id
-CxeVideoCaptureControlSymbian::findVideoController(const TDesC8& aMimeType,
- const TDesC& aSupplier)
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- CX_DEBUG(("video file mime type : %s", &aMimeType));
- CX_DEBUG(("supplier name: %s", &aSupplier));
-
- mVideoControllerUid.iUid = 0;
- mVideoFormatUid.iUid = 0;
-
- // Retrieve a list of possible controllers from ECOM.
- // Controller must support recording the requested mime type.
- // Controller must be provided by preferred supplier.
-
- CMMFControllerPluginSelectionParameters* cSelect(NULL);
- CMMFFormatSelectionParameters* fSelect(NULL);
- RMMFControllerImplInfoArray controllers;
-
- TRAPD(err, cSelect = CMMFControllerPluginSelectionParameters::NewL());
- if (err) {
- return CxeErrorHandlingSymbian::map(err);
- }
-
- TRAP(err, fSelect = CMMFFormatSelectionParameters::NewL());
- if (err) {
- if(cSelect) {
- delete cSelect;
- }
- return CxeErrorHandlingSymbian::map(err);
- }
-
- TRAP( err, {
- fSelect->SetMatchToMimeTypeL(aMimeType);
- cSelect->SetRequiredRecordFormatSupportL(*fSelect);
- cSelect->SetPreferredSupplierL(aSupplier,
- CMMFPluginSelectionParameters::EOnlyPreferredSupplierPluginsReturned);
- cSelect->ListImplementationsL(controllers);
- } );
-
- if (!err && controllers.Count() >= 1) {
- // KErrNotFound is returned unless a controller is found
- err = KErrNotFound;
- // Get the controller UID.
- mVideoControllerUid = controllers[0]->Uid();
-
- // Inquires the controller about supported formats.
- // We use the first controller found having index 0.
- RMMFFormatImplInfoArray formats;
- formats = controllers[0]->RecordFormats();
-
- // Get the first format that supports our mime type.
- int count = formats.Count();
- for (int i=0; i<count; i++) {
- if (formats[i]->SupportsMimeType(aMimeType)) {
- mVideoFormatUid = formats[i]->Uid(); // set the UID
- err = KErrNone;
- break;
- }
- }
- }
- delete cSelect;
- delete fSelect;
- controllers.ResetAndDestroy();
-
- CX_DEBUG_EXIT_FUNCTION();
-
- return CxeErrorHandlingSymbian::map(err);
-}
-
-
/*!
* camera reference changing, release resources
*/
@@ -935,19 +588,24 @@
CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
-* new camera available,
+* new camera available
*/
void CxeVideoCaptureControlSymbian::handleCameraAllocated(CxeError::Id error)
{
CX_DEBUG_ENTER_FUNCTION();
if (!error) {
- // initialize the video recorder utility
- createVideoRecorder();
+ try {
+ // Create the video recorder utility
+ createVideoRecorder();
+ } catch (...) {
+ // We are just trying to create the recorder early.
+ // Retry later when preparing, and fail then if
+ // error still persists.
+ }
// new camera available, read supported video qualities from icm
- // load all still qualities supported by icm
+ // load all video qualities supported by icm
mIcmSupportedVideoResolutions.clear();
Cxe::CameraIndex cameraIndex = mCameraDeviceControl.cameraIndex();
// get list of supported image qualities based on camera index
@@ -958,73 +616,46 @@
CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
* Initializes video recorder.
+* May throw exception.
*/
void CxeVideoCaptureControlSymbian::createVideoRecorder()
{
CX_DEBUG_ENTER_FUNCTION();
-
- // init video recoder
- if (state() == CxeVideoCaptureControl::Idle) {
- if (mVideoRecorder == NULL) {
- TRAPD(initErr, mVideoRecorder =
- new CxeVideoRecorderUtilitySymbian( *this ,
- KAudioPriorityVideoRecording,
- TMdaPriorityPreference( KAudioPrefVideoRecording )));
- if (initErr) {
- CX_DEBUG(("WARNING - VideoRecorderUtility could not be reserved. Failed with err:%d", initErr));
- mVideoRecorder = NULL;
- }
- }
+ if (mVideoRecorder == NULL) {
+ mVideoRecorder = new CxeVideoRecorderUtilitySymbian(*this);
}
-
CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
-* releases resources used by videocapture
+* releases resources used by video capture control
*/
void CxeVideoCaptureControlSymbian::releaseResources()
{
CX_DEBUG_ENTER_FUNCTION();
- // Save the state and filename before releasing.
- QString filenameCopy(filename());
- CxeVideoCaptureControl::State stateCopy(state());
-
// first de-init videocapture control
deinit();
reset();
- // Check if state is stopping, in which case we have to inform the
- // file harvester that a file is to be completed. We would not
- // call harvestFile otherwise in this case.
- // Otherwise the video will not be found from videos app.
- if (stateCopy == CxeVideoCaptureControl::Stopping) {
- emit videoComposed(CxeError::None, filenameCopy);
- }
-
delete mVideoRecorder;
mVideoRecorder = NULL;
CX_DEBUG_EXIT_FUNCTION();
}
-
/*!
-Returns current state of videocapture
+* Returns current state of video capture control
*/
CxeVideoCaptureControl::State CxeVideoCaptureControlSymbian::state() const
{
return static_cast<CxeVideoCaptureControl::State> (stateId());
}
-
/*!
-* slot called when state is changed.
+* Called when state is changed.
*/
void CxeVideoCaptureControlSymbian::handleStateChanged(int newStateId, CxeError::Id error)
{
@@ -1047,7 +678,6 @@
emit stateChanged(static_cast<State> (newStateId), error);
}
-
/*!
* Initialize states for videocapturecontrol
*/
@@ -1066,7 +696,6 @@
setInitialState(Idle);
}
-
/*!
* Updates remaining video recordng time counter to all the video qualities supported by ICM
* this should be done whenever storage location setting changes and when values are
@@ -1078,13 +707,13 @@
for( int index = 0; index < mIcmSupportedVideoResolutions.count(); index++) {
CxeVideoDetails &qualityDetails = mIcmSupportedVideoResolutions[index];
- calculateRemainingTime(qualityDetails, qualityDetails.mRemainingTime);
+ qualityDetails.mRemainingTime = calculateRemainingTime(qualityDetails);
}
CX_DEBUG_EXIT_FUNCTION();
}
-/*
+/*!
* calculates remaining video recording time.
*/
void CxeVideoCaptureControlSymbian::remainingTime(int &time)
@@ -1093,14 +722,12 @@
if (state() == CxeVideoCaptureControl::Recording ||
state() == CxeVideoCaptureControl::Paused) {
- TTimeIntervalMicroSeconds remaining = 0;
- remaining = mVideoRecorder->RecordTimeAvailable();
- time = remaining.Int64() * 1.0 / KOneSecond;
- CX_DEBUG(( "timeRemaining2: %d", time ));
+ time = mVideoRecorder->availableRecordingTime();
+ CX_DEBUG(("CxeVideoCaptureControlSymbian - time remaining: %d", time));
} else {
// Check if we need to recalculate the remaining time.
if (mCurrentVideoDetails.mRemainingTime == CxeVideoDetails::UNKNOWN) {
- calculateRemainingTime(mCurrentVideoDetails, mCurrentVideoDetails.mRemainingTime);
+ mCurrentVideoDetails.mRemainingTime = calculateRemainingTime(mCurrentVideoDetails);
}
time = mCurrentVideoDetails.mRemainingTime;
}
@@ -1108,99 +735,41 @@
CX_DEBUG_EXIT_FUNCTION();
}
-
-
/*!
-* algorithm to calculate remaining recording time
-@ param videoDetails contains the current video resolution that is in use.
-@ time contains the remaining recording time
+* Get the remaining recording time
+* @param videoDetails Contains the current video resolution that is in use.
+* @return The remaining recording time
*/
-void CxeVideoCaptureControlSymbian::calculateRemainingTime(CxeVideoDetails videoDetails, int &time)
+int CxeVideoCaptureControlSymbian::calculateRemainingTime(const CxeVideoDetails& videoDetails)
{
CX_DEBUG_ENTER_FUNCTION();
-
- TTimeIntervalMicroSeconds remaining = 0;
-
- // get available space in the drive selected in the settings
- // for storing videos
- qint64 availableSpace = mDiskMonitor.free();
-
- availableSpace = availableSpace - KMinRequiredSpaceVideo;
-
- // Maximum clip size may be limited for mms quality.
- // If mMaximumSizeInBytes == 0, no limit is specified.
- if (videoDetails.mMaximumSizeInBytes > 0 && videoDetails.mMaximumSizeInBytes < availableSpace) {
- availableSpace = videoDetails.mMaximumSizeInBytes;
- }
-
- // Use average audio/video bitrates to estimate remaining time
- quint32 averageBitRate = 0;
- quint32 averageByteRate = 0;
- qreal scaler = mQualityPresets.avgVideoBitRateScaler();
-
- if (scaler == 0) {
- // video bit rate scaler is 0, use the constant value
- scaler = KCMRAvgVideoBitRateScaler;
- }
-
- int avgVideoBitRate = (videoDetails.mVideoBitRate * scaler);
- int avgAudioBitRate = videoDetails.mAudioBitRate;
-
- int muteSetting = 0; // audio enabled
- mSettings.get(CxeSettingIds::VIDEO_MUTE_SETTING, muteSetting);
-
- if (muteSetting == 1) {
- // audio disabled from setting. hence no audio
- avgAudioBitRate = 0;
- }
-
- averageBitRate = (quint32)(
- (avgVideoBitRate + avgAudioBitRate) * KMetaDataCoeff);
-
- averageByteRate = averageBitRate / 8;
-
- if (availableSpace <= 0) {
- remaining = 0;
- } else {
- // converting microseconds to seconds
- remaining = availableSpace * KOneMillion / averageByteRate;
- if ( (remaining.Int64()) > (quint64(KCamCMaxClipDurationInSecs) * KOneMillion) ) {
- remaining = (quint64(KCamCMaxClipDurationInSecs) * KOneMillion);
- }
- }
- if ( remaining <= quint64(0) ) {
- remaining = 0;
- }
-
- time = remaining.Int64() * 1.0 / KOneSecond;
-
- CX_DEBUG(( "remaining time from algorithm: %d", time ));
-
+ qint64 availableSpace = mDiskMonitor.free() - KMinRequiredSpaceVideo;
+ int time = mQualityPresets.recordingTimeAvailable(videoDetails, availableSpace);
CX_DEBUG_EXIT_FUNCTION();
+ return time;
}
-
/*!
-* Calculates remaining recording time during video recording
+* Calculates elapsed recording time during video recording
+* @return Did fetching elapsed time succeed.
*/
bool CxeVideoCaptureControlSymbian::elapsedTime(int &time)
{
CX_DEBUG_ENTER_FUNCTION();
- TTimeIntervalMicroSeconds timeElapsed = 0;
bool ok = false;
if (state() == CxeVideoCaptureControl::Recording ||
state() == CxeVideoCaptureControl::Paused) {
- TRAPD( err, timeElapsed = mVideoRecorder->DurationL() );
- if (!err) {
- time = timeElapsed.Int64() * 1.0 / KOneSecond;
- CX_DEBUG(("timeElapsed2: %d", time));
+ try {
+ time = mVideoRecorder->duration();
+ CX_DEBUG(("CxeVideoCaptureControlSymbian - elapsed: %d", time));
ok = true;
+ } catch (const std::exception &e) {
+ // Returning false.
}
}
CX_DEBUG_EXIT_FUNCTION();
-
return ok;
}
@@ -1214,8 +783,7 @@
// start recording, if we were playing capture sound
if (state() == CxeVideoCaptureControl::PlayingStartSound) {
setState(CxeVideoCaptureControl::Recording);
-
- mVideoRecorder->Record();
+ mVideoRecorder->record();
}
// in case of video capture stop sound playing, nothing needs to be done
@@ -1224,6 +792,27 @@
CX_DEBUG_EXIT_FUNCTION();
}
+/*!
+* Handle new snapshot.
+* @param status Status code for getting the snapshot.
+* @param snapshot Snapshot pixmap. Empty if error code reported.
+*/
+void CxeVideoCaptureControlSymbian::handleSnapshotReady(CxeError::Id status, const QImage &snapshot)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (mCameraDeviceControl.mode() == Cxe::VideoMode) {
+ OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROL_HANDLESNAPSHOT_1, "msg: e_CX_HANDLE_SNAPSHOT 1");
+
+ // Need to store snapshot for ui to be able to get it also later.
+ mSnapshot = QPixmap::fromImage(snapshot);
+ emit snapshotReady(status, snapshot, filename());
+
+ OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROL_HANDLESNAPSHOT_2, "msg: e_CX_HANDLE_SNAPSHOT 0");
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
/*!
* setting has changed, check if we are interested.
@@ -1247,7 +836,7 @@
// mute setting changed, apply the new setting and re-prepare.
setState(Preparing);
prepare();
- } else if (settingId == CxeSettingIds::FRAME_RATE){
+ } else if (settingId == CxeSettingIds::FRAME_RATE) {
// Frame rate setting changed. Need to re-prepare if we are prepared already.
// Otherwise can wait for next init call.
if (state() == Ready) {
@@ -1268,6 +857,7 @@
*/
void CxeVideoCaptureControlSymbian::handleSceneChanged(CxeScene& scene)
{
+ Q_UNUSED(scene)
CX_DEBUG_ENTER_FUNCTION();
// make sure we are in video mode
@@ -1293,8 +883,7 @@
// Ignore updates on preparing phase.
if (state() == CxeVideoCaptureControl::Ready) {
- int time(0);
- calculateRemainingTime(mCurrentVideoDetails, time);
+ int time(calculateRemainingTime(mCurrentVideoDetails));
if (time != mCurrentVideoDetails.mRemainingTime) {
mCurrentVideoDetails.mRemainingTime = time;
@@ -1316,4 +905,46 @@
return mIcmSupportedVideoResolutions;
}
+/*!
+* Helper method to handle error during preparing phase.
+*/
+void CxeVideoCaptureControlSymbian::handlePrepareFailed()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ CX_DEBUG(("[ERROR] Preparing video failed!"));
+ // Cleanup
+ deinit();
+ // Inform client
+ emit videoPrepareComplete(CxeError::InitializationFailed);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Helper method to handle error from video composing.
+* @param error Symbian error code.
+*/
+void CxeVideoCaptureControlSymbian::handleComposeFailed(int error)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ CX_DEBUG(("[ERROR] Composing video failed!"));
+ // Inform client
+ emit videoComposed(CxeErrorHandlingSymbian::map(error), filename());
+ // Cleanup
+ deinit();
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * Helper method to emulate video stopping events.
+ */
+void CxeVideoCaptureControlSymbian::emulateNormalStopping()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ setState(Stopping);
+ MvruoEvent(TMMFEvent(KCamCControllerCCVideoRecordStopped, KErrNone));
+ MvruoEvent(TMMFEvent(KCamCControllerCCVideoFileComposed, KErrNone));
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
// End of file
--- a/camerauis/cameraxui/cxengine/src/cxevideorecorderutilitysymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxevideorecorderutilitysymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -17,6 +17,22 @@
#include "cxevideorecorderutilitysymbian.h"
#include "cxenamespace.h"
#include "cxutils.h"
+#include <AudioPreference.h>
+
+namespace
+{
+ // Controller UId, can be used by the client to identify the controller, e.g. if the custom command can be used
+ const TUid KCamCControllerImplementationUid = {0x101F8503};
+
+ // Custom command for setting a new filename without closing & reopening the controller
+ enum TCamCControllerCustomCommands
+ {
+ ECamCControllerCCNewFilename = 0,
+ ECamCControllerCCVideoStopAsync
+ };
+
+ const uint KOneMillion = 1000000;
+}
CxeVideoRecorderUtilitySymbian::~CxeVideoRecorderUtilitySymbian()
@@ -27,121 +43,296 @@
CX_DEBUG_EXIT_FUNCTION();
}
-CxeVideoRecorderUtilitySymbian::CxeVideoRecorderUtilitySymbian(MVideoRecorderUtilityObserver& aObserver,
- TInt aPriority,
- TMdaPriorityPreference aPref)
+CxeVideoRecorderUtilitySymbian::CxeVideoRecorderUtilitySymbian(MVideoRecorderUtilityObserver& aObserver)
{
CX_DEBUG_ENTER_FUNCTION();
- TRAPD(initErr, mVideoRecorder = CVideoRecorderUtility::NewL(aObserver, aPriority, aPref));
- mStartuperror = initErr;
+ QT_TRAP_THROWING(mVideoRecorder =
+ CVideoRecorderUtility::NewL(aObserver,
+ KAudioPriorityVideoRecording,
+ TMdaPriorityPreference(KAudioPrefVideoRecording)));
CX_DEBUG_EXIT_FUNCTION();
}
-TInt CxeVideoRecorderUtilitySymbian::CustomCommandSync(const TMMFMessageDestinationPckg& aDestination,
- TInt aFunction,
- const TDesC8& aDataTo1,
- const TDesC8& aDataTo2)
-{
- CX_DEBUG_IN_FUNCTION();
- return mVideoRecorder->CustomCommandSync(aDestination, aFunction, aDataTo1, aDataTo2);
-}
-
-void CxeVideoRecorderUtilitySymbian::OpenFileL(const TDesC& aFileName,
- TInt aCameraHandle,
- TUid aControllerUid,
- TUid aVideoFormat,
- const TDesC8& aVideoType,
- TFourCC aAudioType)
+/*!
+* Open new file for recording.
+* @param cameraHandle Handle for camera.
+* @param filename Full filename of the video file to open.
+* @param fileMimeType MIME type for the video file.
+* @param supplier Preferred supplier.
+* @param videoType Video codec MIME type.
+* @param audioType Audio FourCC type.
+*/
+void CxeVideoRecorderUtilitySymbian::open(int cameraHandle,
+ const QString &filename,
+ const QString &fileMimeType,
+ const QString &supplier,
+ const QString &videoType,
+ const QString &audioType)
{
CX_DEBUG_ENTER_FUNCTION();
- mVideoRecorder->OpenFileL(aFileName, aCameraHandle, aControllerUid, aVideoFormat, aVideoType, aAudioType);
+ CX_DEBUG(("CxeVideoRecorderUtilitySymbian - filename [%s]", filename.toAscii().constData()));
+ CX_DEBUG(("CxeVideoRecorderUtilitySymbian - file mime [%s]", fileMimeType.toAscii().constData()));
+ CX_DEBUG(("CxeVideoRecorderUtilitySymbian - supplier [%s]", supplier.toAscii().constData()));
+ CX_DEBUG(("CxeVideoRecorderUtilitySymbian - codec mime [%s]", videoType.toAscii().constData()));
+ CX_DEBUG(("CxeVideoRecorderUtilitySymbian - audio FourCC [%s]", audioType.toAscii().constData()));
+
+ QByteArray bytes = videoType.toLatin1();
+ TPtrC8 videoTypeDesC(reinterpret_cast<const TUint8*>(bytes.constData()), bytes.size());
+ TPtrC16 filenameDesC(reinterpret_cast<const TUint16*>(filename.utf16()));
+
+ TUid controllerId;
+ TUid formatId;
+ QT_TRAP_THROWING({
+ // Find the video controller id and video format id.
+ findControllerL(fileMimeType, supplier, controllerId, formatId);
+
+ // Try to open new video file with given parameters.
+ mVideoRecorder->OpenFileL(filenameDesC, cameraHandle, controllerId,
+ formatId, videoTypeDesC, audioFourCC(audioType));
+ });
CX_DEBUG_EXIT_FUNCTION();
}
-void CxeVideoRecorderUtilitySymbian::SetVideoFrameSizeL(TSize aSize)
+/*!
+* Set frame size.
+* @param size The video frame size.
+*/
+void CxeVideoRecorderUtilitySymbian::setVideoFrameSize(const QSize &size)
{
CX_DEBUG_ENTER_FUNCTION();
- mVideoRecorder->SetVideoFrameSizeL(aSize);
+ TSize frameSize(size.width(), size.height());
+ QT_TRAP_THROWING(mVideoRecorder->SetVideoFrameSizeL(frameSize));
CX_DEBUG_EXIT_FUNCTION();
}
-void CxeVideoRecorderUtilitySymbian::SetVideoFrameRateL(TInt aRate)
+/*!
+* Set video frame rate.
+* @param rate The video frame rate.
+*/
+void CxeVideoRecorderUtilitySymbian::setVideoFrameRate(int rate)
{
CX_DEBUG_ENTER_FUNCTION();
- mVideoRecorder->SetVideoFrameRateL(aRate);
+ QT_TRAP_THROWING(mVideoRecorder->SetVideoFrameRateL(rate));
CX_DEBUG_EXIT_FUNCTION();
}
-void CxeVideoRecorderUtilitySymbian::SetVideoBitRateL(TInt aRate)
+/*!
+* Set video bit rate.
+* @param The video bit rate.
+*/
+void CxeVideoRecorderUtilitySymbian::setVideoBitRate(int rate)
{
CX_DEBUG_ENTER_FUNCTION();
- mVideoRecorder->SetVideoBitRateL(aRate);
+ QT_TRAP_THROWING(mVideoRecorder->SetVideoBitRateL(rate));
CX_DEBUG_EXIT_FUNCTION();
}
-void CxeVideoRecorderUtilitySymbian::SetAudioEnabledL(TBool aEnable)
+/*!
+* Set if audio recording is on or not.
+* @param enabled Is audio recording enabled.
+*/
+void CxeVideoRecorderUtilitySymbian::setAudioEnabled(bool enabled)
{
CX_DEBUG_ENTER_FUNCTION();
- mVideoRecorder->SetAudioEnabledL(aEnable);
+ QT_TRAP_THROWING(mVideoRecorder->SetAudioEnabledL(enabled));
CX_DEBUG_EXIT_FUNCTION();
}
-void CxeVideoRecorderUtilitySymbian::SetMaxClipSizeL(TInt aClipSizeInBytes)
+/*!
+* Set maximum video clip size in bytes.
+* @param sizeInBytes Video clip size limit.
+*/
+void CxeVideoRecorderUtilitySymbian::setVideoMaxSize(int sizeInBytes)
{
CX_DEBUG_ENTER_FUNCTION();
- if (aClipSizeInBytes <= 0) {
- aClipSizeInBytes = KMMFNoMaxClipSize;
+ if (sizeInBytes <= 0) {
+ sizeInBytes = KMMFNoMaxClipSize;
}
- mVideoRecorder->SetMaxClipSizeL(aClipSizeInBytes);
+ QT_TRAP_THROWING(mVideoRecorder->SetMaxClipSizeL(sizeInBytes));
CX_DEBUG_EXIT_FUNCTION();
}
-void CxeVideoRecorderUtilitySymbian::Close()
+/*!
+* Close video recorder, freeing its resources.
+*/
+void CxeVideoRecorderUtilitySymbian::close()
{
CX_DEBUG_ENTER_FUNCTION();
mVideoRecorder->Close();
CX_DEBUG_EXIT_FUNCTION();
}
-void CxeVideoRecorderUtilitySymbian::Prepare()
+/*!
+* Prepare for video recording.
+*/
+void CxeVideoRecorderUtilitySymbian::prepare()
{
CX_DEBUG_ENTER_FUNCTION();
mVideoRecorder->Prepare();
CX_DEBUG_EXIT_FUNCTION();
}
-void CxeVideoRecorderUtilitySymbian::Record()
+/*!
+* Start recording.
+*/
+void CxeVideoRecorderUtilitySymbian::record()
{
CX_DEBUG_ENTER_FUNCTION();
mVideoRecorder->Record();
CX_DEBUG_EXIT_FUNCTION();
}
-int CxeVideoRecorderUtilitySymbian::Stop()
+/*!
+* Stop recording.
+* @param asynchronous Use asynchronous (true) or synchronous (false) stopping.
+*/
+void CxeVideoRecorderUtilitySymbian::stop(bool asynchronous)
{
- CX_DEBUG_IN_FUNCTION();
- return mVideoRecorder->Stop();
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (asynchronous) {
+ TMMFMessageDestination dest(KCamCControllerImplementationUid, KMMFObjectHandleController);
+ qt_symbian_throwIfError(mVideoRecorder->CustomCommandSync(
+ dest, ECamCControllerCCVideoStopAsync, KNullDesC8, KNullDesC8));
+ } else {
+ qt_symbian_throwIfError(mVideoRecorder->Stop());
+ }
+ CX_DEBUG_EXIT_FUNCTION();
}
-void CxeVideoRecorderUtilitySymbian::PauseL()
+/*!
+* Pause recording.
+*/
+void CxeVideoRecorderUtilitySymbian::pause()
{
CX_DEBUG_ENTER_FUNCTION();
- mVideoRecorder->PauseL();
+ QT_TRAP_THROWING(mVideoRecorder->PauseL());
CX_DEBUG_EXIT_FUNCTION();
}
-TTimeIntervalMicroSeconds CxeVideoRecorderUtilitySymbian::RecordTimeAvailable()
+/*!
+* Get estimated available recording time.
+* @return Available recording time estimate in seconds.
+*/
+int CxeVideoRecorderUtilitySymbian::availableRecordingTime()
{
CX_DEBUG_IN_FUNCTION();
- return mVideoRecorder->RecordTimeAvailable();
+ // Convert microseconds to seconds.
+ return mVideoRecorder->RecordTimeAvailable().Int64() * 1.0 / KOneMillion;
+}
+
+/*!
+* Get elapsed duration of the recorded video.
+* @return Duration of the video in seconds.
+*/
+int CxeVideoRecorderUtilitySymbian::duration()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ int time(0);
+ // Convert microseconds to seconds.
+ QT_TRAP_THROWING(time = mVideoRecorder->DurationL().Int64() * 1.0 / KOneMillion);
+ CX_DEBUG_EXIT_FUNCTION();
+ return time;
}
-TTimeIntervalMicroSeconds CxeVideoRecorderUtilitySymbian::DurationL()
+/*!
+* Find video controller and format UIDs based on file mime type and preferred supplier.
+* @param fileMimeType MIME type for the video file.
+* @param supplier Preferred supplier.
+* @param controllerId Returns found controller UID.
+* @param formatId Returns found format UID.
+*/
+void CxeVideoRecorderUtilitySymbian::findControllerL(const QString& fileMimeType,
+ const QString& supplier,
+ TUid& controllerId,
+ TUid& formatId)
{
- CX_DEBUG_IN_FUNCTION();
- return mVideoRecorder->DurationL();
+ CX_DEBUG_ENTER_FUNCTION();
+
+ // Retrieve a list of possible controllers from ECOM.
+ // Controller must support recording the requested mime type.
+ // Controller must be provided by preferred supplier.
+ controllerId = KNullUid;
+ formatId = KNullUid;
+
+ QByteArray bytes = fileMimeType.toLatin1();
+ TPtrC8 mimeTPtr(reinterpret_cast<const TUint8*>(bytes.constData()), bytes.size());
+ TPtrC16 supplierTPtr(reinterpret_cast<const TUint16*>(supplier.utf16()));
+
+ CMMFControllerPluginSelectionParameters* cSelect(NULL);
+ CMMFFormatSelectionParameters* fSelect(NULL);
+ RMMFControllerImplInfoArray controllers;
+
+ cSelect = CMMFControllerPluginSelectionParameters::NewLC();
+ fSelect = CMMFFormatSelectionParameters::NewLC();
+
+ fSelect->SetMatchToMimeTypeL(mimeTPtr);
+ cSelect->SetRequiredRecordFormatSupportL(*fSelect);
+ cSelect->SetPreferredSupplierL(supplierTPtr,
+ CMMFPluginSelectionParameters::EOnlyPreferredSupplierPluginsReturned);
+ cSelect->ListImplementationsL(controllers);
+ CleanupResetAndDestroyPushL(controllers);
+
+ if (controllers.Count() <= 0) {
+ CX_DEBUG(("CxeVideoRecorderUtilitySymbian - zero controllers found, leaving!"));
+ User::Leave(KErrNotFound);
+ }
+
+ // Inquires the controller about supported formats.
+ // We use the first controller found having index 0.
+ const RMMFFormatImplInfoArray& formats = controllers[0]->RecordFormats();
+
+ // Get the first format that supports our mime type.
+ int count(formats.Count());
+ for (int i=0; i<count; i++) {
+ if (formats[i]->SupportsMimeType(mimeTPtr)) {
+ CX_DEBUG(("CxeVideoRecorderUtilitySymbian - found controller"));
+ // Store the format UID
+ formatId = formats[i]->Uid();
+ // Store the controller UID
+ controllerId = controllers[0]->Uid();
+ break;
+ }
+ }
+
+ // Check that we found the uids.
+ if (controllerId == KNullUid) {
+ CX_DEBUG(("CxeVideoRecorderUtilitySymbian - no matching controller found, leaving!"));
+ User::Leave(KErrNotFound);
+ }
+
+ CleanupStack::PopAndDestroy(3); // controllers, fSelect, cSelect
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Helper method to convert QString to TFourCC.
+* @param str String to convert.
+*/
+TFourCC CxeVideoRecorderUtilitySymbian::audioFourCC(const QString& str)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ QByteArray audioType = str.toAscii();
+
+ quint8 char1(' ');
+ quint8 char2(' ');
+ quint8 char3(' ');
+ quint8 char4(' ');
+
+ if (audioType.count() > 3) {
+ char1 = audioType[0];
+ char2 = audioType[1];
+ char3 = audioType[2];
+
+ if (audioType.count() == 4) {
+ char4 = audioType[3];
+ }
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+ return TFourCC(char1, char2, char3, char4);
}
-
// end of file
--- a/camerauis/cameraxui/cxengine/src/cxeviewfindercontrolsymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxeviewfindercontrolsymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -163,6 +163,8 @@
CxeError::Id CxeViewfinderControlSymbian::start()
{
CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXEVIEWFINDERCONTROL_START_1, "msg: e_CX_VIEWFINDER_START 1");
+
TInt err = KErrNone;
if ( state() == Running ) {
@@ -211,7 +213,7 @@
CCoeEnv::Static()->WsSession(),
*CCoeEnv::Static()->ScreenDevice(),
*mVideoWindow, activeViewfinderRect));
- OstTrace0(camerax_performance, CXEVIEWFINDERCONTROLSYMBIAN_START, "msg: e_CX_STARTUP 0");
+ OstTrace0(camerax_performance, CXEVIEWFINDERCONTROL_STARTUP, "msg: e_CX_STARTUP 0");
setState(Running);
break;
}
@@ -248,7 +250,7 @@
// vf already running. nothing to do
}
- CX_DEBUG( ("CxeViewfinderControlSymbian::start symbian error code : %d", err ) );
+ OstTrace0(camerax_performance, CXEVIEWFINDERCONTROL_START_2, "msg: e_CX_VIEWFINDER_START 0");
CX_DEBUG_EXIT_FUNCTION();
return CxeErrorHandlingSymbian::map(err);
}
@@ -260,6 +262,7 @@
int CxeViewfinderControlSymbian::initViewfinder()
{
CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXEVIEWFINDERCONTROL_INIT_1, "msg: e_CX_VIEWFINDER_INIT 1");
TInt err = KErrNone;
if (state() != Uninitialized) {
@@ -298,6 +301,7 @@
setState( Ready );
#endif
+ OstTrace0(camerax_performance, CXEVIEWFINDERCONTROL_INIT_2, "msg: e_CX_VIEWFINDER_INIT 0");
CX_DEBUG_EXIT_FUNCTION();
return err;
}
@@ -309,6 +313,7 @@
void CxeViewfinderControlSymbian::createViewfinderWindowL()
{
CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXEVIEWFINDERCONTROL_CREATE_WINDOW_1, "msg: e_CX_VIEWFINDER_CREATE_WINDOW 1");
if (!mUiWindow) {
CX_DEBUG( ( "mUiWindow not set - cannot create VF window!" ) );
@@ -339,6 +344,7 @@
CX_DEBUG(("mVideoWindow ordinal position is: %d", mVideoWindow->OrdinalPosition()));
CX_DEBUG(("mUiWindow ordinal position is: %d", mUiWindow->OrdinalPosition()));
+ OstTrace0(camerax_performance, CXEVIEWFINDERCONTROL_CREATE_WINDOW_2, "msg: e_CX_VIEWFINDER_CREATE_WINDOW 0");
CX_DEBUG_EXIT_FUNCTION();
}
--- a/camerauis/cameraxui/cxengine/src/cxezoomcontrolsymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxezoomcontrolsymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -209,7 +209,7 @@
if (mCameraDeviceControl.state() == CxeCameraDeviceControl::Ready) {
init();
// if CxeCameraDeviceControl is ready, this pointer is valid
- CX_ASSERT_ALWAYS(mCameraDevice.advancedSettings())
+ CX_ASSERT_ALWAYS(mCameraDevice.advancedSettings());
int error = KErrNone;
TRAP(error,
mCameraDevice.advancedSettings()->GetDigitalZoomStepsL(mDigitalZoomValues, mDigitalZoomValueInfo);
@@ -256,7 +256,7 @@
mMaxZoomLevel = cameraInfo.iMaxDigitalZoom;
}
// change the state, since zoom is now ready
- setState(Ready, KErrNone);
+ setState(Ready);
mCameraDevice.advancedSettings()->SetDigitalZoom(mDigitalZoomValues[mCurrentZoomLevel]);
--- a/camerauis/cameraxui/cxengine/src/dummyengine/cxedummycamera.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/dummyengine/cxedummycamera.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -43,6 +43,8 @@
TSize(640,480)
};
static const int IMAGE_CAPTURE_SIZE_COUNT = sizeof(IMAGE_CAPTURE_SIZES)/sizeof(TSize);
+
+ _LIT( PANICDUMMYCAMERA, "DummyCamera" );
}
@@ -78,7 +80,11 @@
void CxeDummyCamera::doCommand( TCxeDummyCommand aCmd )
{
- iCommandBuf.Insert( aCmd, 0 );
+ TInt status = iCommandBuf.Insert( aCmd, 0 );
+ if ( status != KErrNone )
+ {
+ User::Panic(PANICDUMMYCAMERA, 1);
+ }
if ( !iCommandTimer->IsActive() )
{
iCommandTimer->Start(100, 100, TCallBack(CxeDummyCamera::callBack, this));
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakeautofocuscontrol.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakeautofocuscontrol.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -35,7 +35,7 @@
CX_DEBUG_IN_FUNCTION();
}
-CxeError::Id CxeFakeAutoFocusControl::start()
+CxeError::Id CxeFakeAutoFocusControl::start(bool soundEnabled)
{
CX_DEBUG_IN_FUNCTION();
return CxeError::None;
@@ -59,11 +59,22 @@
return mAfMode;
}
+bool CxeFakeAutoFocusControl::isFixedFocusMode(Mode mode) const
+{
+ return (mode == CxeAutoFocusControl::Hyperfocal
+ || mode == CxeAutoFocusControl::Infinity);
+}
+
bool CxeFakeAutoFocusControl::supported() const
{
return true;
}
+bool CxeFakeAutoFocusControl::isSoundEnabled() const
+{
+ return true;
+}
+
CxeAutoFocusControl::State CxeFakeAutoFocusControl::state() const
{
return static_cast<State>(stateId());
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakeautofocuscontrol.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakeautofocuscontrol.h Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -32,12 +32,14 @@
CxeFakeAutoFocusControl();
virtual ~CxeFakeAutoFocusControl();
- CxeError::Id start();
+ CxeError::Id start(bool soundEnabled = true);
void cancel();
void setMode(CxeAutoFocusControl::Mode newMode);
CxeAutoFocusControl::Mode mode() const;
+ bool isFixedFocusMode(Mode mode) const;
CxeAutoFocusControl::State state() const;
bool supported() const;
+ bool isSoundEnabled() const;
public: // methods for testing
void setFakeState(CxeAutoFocusControl::State);
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakeengine.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakeengine.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -191,6 +191,11 @@
return mFakeCameraDeviceControl->mode();
}
+void CxeFakeEngine::setMode(Cxe::CameraMode mode)
+{
+ mFakeCameraDeviceControl->setMode(mode);
+}
+
void CxeFakeEngine::initModeFake(Cxe::CameraMode cameraMode)
{
mFakeCameraDeviceControl->setMode( cameraMode );
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakeengine.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakeengine.h Thu Jul 15 01:55:05 2010 +0300
@@ -63,6 +63,7 @@
CxeSettings &settings();
CxeFeatureManager &featureManager();
Cxe::CameraMode mode() const;
+ void setMode(Cxe::CameraMode mode);
void initMode(Cxe::CameraMode cameraMode);
bool isEngineReady();
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakefilesavethread.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakefilesavethread.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -34,14 +34,14 @@
}
-void CxeFakeFileSaveThread::handleVideoSaved(CxeError::Id status, const QString& filename)
+void CxeFakeFileSaveThread::handleVideoSaved(CxeError::Id status, const QString &filename)
{
}
-void CxeFakeFileSaveThread::handleSnapshotReady(CxeError::Id status, const QPixmap& snapshot, const QString& filename)
+void CxeFakeFileSaveThread::handleSnapshotReady(CxeError::Id status, const QImage &snapshot, const QString &filename)
{
}
-void CxeFakeFileSaveThread::handleSnapshotReady(CxeError::Id status, const QPixmap& snapshot, int id)
+void CxeFakeFileSaveThread::handleSnapshotReady(CxeError::Id status, const QImage &snapshot, int id)
{
}
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakefilesavethread.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakefilesavethread.h Thu Jul 15 01:55:05 2010 +0300
@@ -30,9 +30,9 @@
void save(CxeImageDataItem *data);
public slots:
- void handleVideoSaved(CxeError::Id status, const QString& filename);
- void handleSnapshotReady(CxeError::Id status, const QPixmap& snapshot, const QString& filename);
- void handleSnapshotReady(CxeError::Id status, const QPixmap& snapshot, int id);
+ void handleVideoSaved(CxeError::Id status, const QString &filename);
+ void handleSnapshotReady(CxeError::Id status, const QImage &snapshot, const QString &filename);
+ void handleSnapshotReady(CxeError::Id status, const QImage &snapshot, int id);
};
#endif // CXEFAKEFILESAVETHREAD_H
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakeimagedataitem.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakeimagedataitem.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -22,11 +22,12 @@
#include "cxeimagedataitem.h"
#include "cxutils.h"
-CxeFakeImageDataItem::CxeFakeImageDataItem(int index, QByteArray data, QString filename, int id)
+CxeFakeImageDataItem::CxeFakeImageDataItem(int index, QByteArray data, QString filename, int id, bool addLocation)
: mId(id),
mIndex(index),
mData(data),
mFileName(filename),
+ mAddLocationInfo(addLocation),
mState(CxeImageDataItem::SavePending)
{
CX_DEBUG_IN_FUNCTION();
@@ -64,4 +65,10 @@
return mFileName;
}
+
+bool CxeFakeImageDataItem::addLocation() const
+{
+ return mAddLocationInfo;
+}
+
// end of file
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakeimagedataitem.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakeimagedataitem.h Thu Jul 15 01:55:05 2010 +0300
@@ -26,7 +26,7 @@
Q_OBJECT
public: // constructor and destructor
- CxeFakeImageDataItem(int index, QByteArray data, QString filename, int id);
+ CxeFakeImageDataItem(int index, QByteArray data, QString filename, int id, bool addLocation);
virtual ~CxeFakeImageDataItem();
public: // from CxeImageDataItem
@@ -34,12 +34,14 @@
CxeImageDataItem::State state() const;
int id() const;
QString path() const;
+ bool addLocation() const;
private:
int mId;
int mIndex;
QByteArray mData;
QString mFileName;
+ bool mAddLocationInfo;
CxeImageDataItem::State mState;
};
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakequalitypresets.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakequalitypresets.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -47,9 +47,15 @@
return list;
}
-qreal CxeFakeQualityPresets::avgVideoBitRateScaler()
+int CxeFakeQualityPresets::recordingTimeAvailable(const CxeVideoDetails& details, qint64 space)
{
- return 1.0;
+ int time(0);
+ if (details.mMaximumSizeInBytes > 0 && details.mMaximumSizeInBytes < space) {
+ time = details.mMaximumSizeInBytes / 1000; // 1 kB/s
+ } else {
+ time = space / 1000;
+ }
+ return time;
}
CxeImageDetails CxeFakeQualityPresets::fakeImageDetails()
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakequalitypresets.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakequalitypresets.h Thu Jul 15 01:55:05 2010 +0300
@@ -28,7 +28,7 @@
virtual ~CxeFakeQualityPresets();
QList<CxeImageDetails> imageQualityPresets(Cxe::CameraIndex cameraId);
QList<CxeVideoDetails> videoQualityPresets(Cxe::CameraIndex cameraId);
- qreal avgVideoBitRateScaler();
+ int recordingTimeAvailable(const CxeVideoDetails& details, qint64 space);
public:
static CxeImageDetails fakeImageDetails();
static CxeVideoDetails fakeVideoDetails();
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakesettings.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakesettings.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -58,12 +58,14 @@
CxeError::Id CxeFakeSettings::set(const QString& key, int newValue)
{
mSettingKeyHash[key] = QVariant(newValue);
+ emit settingValueChanged(key, newValue);
return CxeError::None;
}
CxeError::Id CxeFakeSettings::set(const QString &key, const QString &newValue)
{
mSettingKeyHash[key] = QVariant(newValue);
+ emit settingValueChanged(key, newValue);
return CxeError::None;
}
@@ -72,6 +74,7 @@
CxeError::Id CxeFakeSettings::set(const QString &key, qreal newValue)
{
mSettingKeyHash[key] = QVariant(newValue);
+ emit settingValueChanged(key, newValue);
return CxeError::None;
}
@@ -80,3 +83,8 @@
{
}
+
+void CxeFakeSettings::emulate(long int uid, unsigned long int key, QVariant value)
+{
+ emit settingValueChanged(uid, key, value);
+}
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakesettings.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakesettings.h Thu Jul 15 01:55:05 2010 +0300
@@ -41,7 +41,8 @@
void reset();
public: // methods for unit testing
- // ??
+
+ void emulate(long int uid, unsigned long int key, QVariant value);
private: // data
QHash<QString, QVariant> mSettingKeyHash;
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakesettingsmodel.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakesettingsmodel.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -20,7 +20,12 @@
CxeFakeSettingsModel::CxeFakeSettingsModel()
{
- CX_DEBUG_IN_FUNCTION();
+ CX_DEBUG_ENTER_FUNCTION();
+
+ initDefaultCameraSettings();
+ initRuntimeSettings();
+
+ CX_DEBUG_EXIT_FUNCTION();
}
CxeFakeSettingsModel::~CxeFakeSettingsModel()
@@ -34,8 +39,8 @@
CxeError::Id err = CxeError::None;
// read run-time configuration value
- if (mStore.contains(key)) {
- value = qVariantFromValue<QList<QVariant> > (mStore[key]);
+ if (mRuntimeSettings.contains(key)) {
+ value = qVariantFromValue<QVariantList > (mRuntimeSettings.value(key));
} else {
err = CxeError::NotFound;
}
@@ -72,7 +77,7 @@
}
-/* This is a helper method for this fake class that can be used to set key-value pairs
+/*! This is a helper method for this fake class that can be used to set key-value pairs
* to local mStore database. Key-value pairs don't have to refer any real values used
* in camera application as the fake class is used only for testing purposes
*/
@@ -95,29 +100,29 @@
CxeError::Id CxeFakeSettingsModel::setImageScene(const QString &newScene)
{
- mDummyScene.clear();
+ mDummyImageScene.clear();
// image scene mode key values
- if(newScene == CxeSettingIds::IMAGE_SCENE_AUTO) {
- mDummyScene.insert(CxeSettingIds::IMAGE_SCENE, CxeSettingIds::IMAGE_SCENE_AUTO);
+ if(newScene == Cxe::IMAGE_SCENE_AUTO) {
+ mDummyImageScene.insert(CxeSettingIds::SCENE_ID, Cxe::IMAGE_SCENE_AUTO);
}
- else if(newScene == CxeSettingIds::IMAGE_SCENE_PORTRAIT) {
- mDummyScene.insert(CxeSettingIds::IMAGE_SCENE, CxeSettingIds::IMAGE_SCENE_PORTRAIT);
+ else if(newScene == Cxe::IMAGE_SCENE_PORTRAIT) {
+ mDummyImageScene.insert(CxeSettingIds::SCENE_ID, Cxe::IMAGE_SCENE_PORTRAIT);
}
- else if(newScene == CxeSettingIds::IMAGE_SCENE_SCENERY) {
- mDummyScene.insert(CxeSettingIds::IMAGE_SCENE, CxeSettingIds::IMAGE_SCENE_SCENERY);
+ else if(newScene == Cxe::IMAGE_SCENE_SCENERY) {
+ mDummyImageScene.insert(CxeSettingIds::SCENE_ID, Cxe::IMAGE_SCENE_SCENERY);
}
- else if(newScene == CxeSettingIds::IMAGE_SCENE_MACRO) {
- mDummyScene.insert(CxeSettingIds::IMAGE_SCENE, CxeSettingIds::IMAGE_SCENE_MACRO);
+ else if(newScene == Cxe::IMAGE_SCENE_MACRO) {
+ mDummyImageScene.insert(CxeSettingIds::SCENE_ID, Cxe::IMAGE_SCENE_MACRO);
}
- else if(newScene == CxeSettingIds::IMAGE_SCENE_SPORTS) {
- mDummyScene.insert(CxeSettingIds::IMAGE_SCENE, CxeSettingIds::IMAGE_SCENE_SPORTS);
+ else if(newScene == Cxe::IMAGE_SCENE_SPORTS) {
+ mDummyImageScene.insert(CxeSettingIds::SCENE_ID, Cxe::IMAGE_SCENE_SPORTS);
}
- else if(newScene == CxeSettingIds::IMAGE_SCENE_NIGHT) {
- mDummyScene.insert(CxeSettingIds::IMAGE_SCENE, CxeSettingIds::IMAGE_SCENE_NIGHT);
+ else if(newScene == Cxe::IMAGE_SCENE_NIGHT) {
+ mDummyImageScene.insert(CxeSettingIds::SCENE_ID, Cxe::IMAGE_SCENE_NIGHT);
}
- else if(newScene == CxeSettingIds::IMAGE_SCENE_NIGHTPORTRAIT) {
- mDummyScene.insert(CxeSettingIds::IMAGE_SCENE, CxeSettingIds::IMAGE_SCENE_NIGHTPORTRAIT);
+ else if(newScene == Cxe::IMAGE_SCENE_NIGHTPORTRAIT) {
+ mDummyImageScene.insert(CxeSettingIds::SCENE_ID, Cxe::IMAGE_SCENE_NIGHTPORTRAIT);
}
else {
return CxeError::NotFound;
@@ -128,20 +133,20 @@
CxeError::Id CxeFakeSettingsModel::setVideoScene(const QString &newScene)
{
- mDummyScene.clear();
+ mDummyVideoScene.clear();
// image scene mode key values
- if(newScene == CxeSettingIds::VIDEO_SCENE_AUTO) {
- mDummyScene.insert(CxeSettingIds::VIDEO_SCENE, CxeSettingIds::VIDEO_SCENE_AUTO);
+ if(newScene == Cxe::VIDEO_SCENE_AUTO) {
+ mDummyVideoScene.insert(CxeSettingIds::SCENE_ID, Cxe::VIDEO_SCENE_AUTO);
}
- else if(newScene == CxeSettingIds::VIDEO_SCENE_NIGHTPORTRAIT) {
- mDummyScene.insert(CxeSettingIds::VIDEO_SCENE, CxeSettingIds::VIDEO_SCENE_NIGHTPORTRAIT);
+ else if(newScene == Cxe::VIDEO_SCENE_NIGHTPORTRAIT) {
+ mDummyVideoScene.insert(CxeSettingIds::SCENE_ID, Cxe::VIDEO_SCENE_NIGHTPORTRAIT);
}
- else if(newScene == CxeSettingIds::VIDEO_SCENE_LOWLIGHT) {
- mDummyScene.insert(CxeSettingIds::VIDEO_SCENE, CxeSettingIds::VIDEO_SCENE_LOWLIGHT);
+ else if(newScene == Cxe::VIDEO_SCENE_LOWLIGHT) {
+ mDummyVideoScene.insert(CxeSettingIds::SCENE_ID, Cxe::VIDEO_SCENE_LOWLIGHT);
}
- else if(newScene == CxeSettingIds::VIDEO_SCENE_NIGHT) {
- mDummyScene.insert(CxeSettingIds::VIDEO_SCENE, CxeSettingIds::VIDEO_SCENE_NIGHT);
+ else if(newScene == Cxe::VIDEO_SCENE_NIGHT) {
+ mDummyVideoScene.insert(CxeSettingIds::SCENE_ID, Cxe::VIDEO_SCENE_NIGHT);
}
else {
return CxeError::NotFound;
@@ -151,6 +156,24 @@
}
+CxeScene& CxeFakeSettingsModel::currentImageScene()
+{
+ return mDummyImageScene;
+}
+
+
+CxeScene& CxeFakeSettingsModel::currentVideoScene()
+{
+ return mDummyVideoScene;
+}
+
+
+void CxeFakeSettingsModel::cameraModeChanged(Cxe::CameraMode newMode)
+{
+ mDummyCameraMode = newMode;
+}
+
+
/* This helper method initializes fake store for default camera settings
*/
void CxeFakeSettingsModel::initDefaultCameraSettings()
@@ -171,34 +194,47 @@
mSettingStore.insert(CxeSettingIds::FRAME_RATE, QVariant(1));
mSettingStore.insert(CxeSettingIds::IMAGE_QUALITY, QVariant(1));
mSettingStore.insert(CxeSettingIds::IMAGE_SCENE, QVariant(1));
- mSettingStore.insert(CxeSettingIds::IMAGE_SCENE_AUTO, QVariant(1));
- mSettingStore.insert(CxeSettingIds::IMAGE_SCENE_MACRO, QVariant(1));
- mSettingStore.insert(CxeSettingIds::IMAGE_SCENE_NIGHT, QVariant(1));
- mSettingStore.insert(CxeSettingIds::IMAGE_SCENE_NIGHTPORTRAIT, QVariant(1));
- mSettingStore.insert(CxeSettingIds::IMAGE_SCENE_PORTRAIT, QVariant(1));
- mSettingStore.insert(CxeSettingIds::IMAGE_SCENE_SCENERY, QVariant(1));
- mSettingStore.insert(CxeSettingIds::IMAGE_SCENE_SPORTS, QVariant(1));
mSettingStore.insert(CxeSettingIds::LIGHT_SENSITIVITY, QVariant(1));
mSettingStore.insert(CxeSettingIds::SCENE_ID, QVariant(1));
mSettingStore.insert(CxeSettingIds::SECONDARY_CAMERA, QVariant(1));
mSettingStore.insert(CxeSettingIds::SELF_TIMER, QVariant(1));
mSettingStore.insert(CxeSettingIds::VIDEO_SCENE, QVariant(1));
- mSettingStore.insert(CxeSettingIds::VIDEO_SCENE_AUTO, QVariant(1));
- mSettingStore.insert(CxeSettingIds::VIDEO_SCENE_LOWLIGHT, QVariant(1));
- mSettingStore.insert(CxeSettingIds::VIDEO_SCENE_NIGHT, QVariant(1));
- mSettingStore.insert(CxeSettingIds::VIDEO_SCENE_NIGHTPORTRAIT, QVariant(1));
mSettingStore.insert(CxeSettingIds::WHITE_BALANCE, QVariant(1));
+
+ // default scene
+ setImageScene(Cxe::IMAGE_SCENE_AUTO);
+ setVideoScene(Cxe::VIDEO_SCENE_AUTO);
+
CX_DEBUG_EXIT_FUNCTION();
}
-void CxeFakeSettingsModel::testSetCurrenImageScene()
+
+
+/* This helper method initializes fake runtime setting values for the keys
+ */
+void CxeFakeSettingsModel::initRuntimeSettings()
{
- mDummyScene.insert(CxeSettingIds::SCENE_ID, CxeSettingIds::IMAGE_SCENE);
-}
+ CX_DEBUG_ENTER_FUNCTION();
+
+ QVariantList supported;
+ supported.append(QVariant(1));
+
+ QVariantList notSupported;
+ notSupported.append(QVariant(0));
-void CxeFakeSettingsModel::testSetCurrenVideoScene()
-{
- mDummyScene.insert(CxeSettingIds::SCENE_ID, CxeSettingIds::VIDEO_SCENE);
+ QVariantList values;
+ values.append(QVariant(1));
+ values.append(QVariant(2));
+ values.append(QVariant(3));
+
+ mRuntimeSettings.insert(CxeRuntimeKeys::PRIMARY_CAMERA_CAPTURE_KEYS, supported);
+ mRuntimeSettings.insert(CxeRuntimeKeys::PRIMARY_CAMERA_AUTOFOCUS_KEYS, supported);
+ mRuntimeSettings.insert(CxeRuntimeKeys::SECONDARY_CAMERA_CAPTURE_KEYS, notSupported);
+ mRuntimeSettings.insert(CxeRuntimeKeys::FREE_MEMORY_LEVELS, notSupported);
+ mRuntimeSettings.insert(CxeRuntimeKeys::STILL_MAX_ZOOM_LIMITS, values);
+ mRuntimeSettings.insert(CxeRuntimeKeys::VIDEO_MAX_ZOOM_LIMITS, values);
+
+ CX_DEBUG_EXIT_FUNCTION();
}
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakesettingsmodel.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakesettingsmodel.h Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -17,7 +17,7 @@
#ifndef CXEFAKESETTINGSMODEL_H
#define CXEFAKESETTINGSMODEL_H
-#include <QMap>
+#include <QHash>
#include "cxesettingsmodel.h"
class CxeFakeSettingsModel : public CxeSettingsModel
@@ -34,15 +34,16 @@
CxeError::Id getRuntimeValue(const QString &key, QVariant &value);
CxeError::Id set(const QString &key,const QVariant newValue);
- CxeScene& currentImageScene() {return mDummyScene;}
- CxeScene& currentVideoScene() {return mDummyScene;}
- void cameraModeChanged(Cxe::CameraMode newMode) {mDummyCameraMode = newMode;}
+ CxeScene& currentImageScene();
+ CxeScene& currentVideoScene();
+ void cameraModeChanged(Cxe::CameraMode newMode);
CxeError::Id setImageScene(const QString &newScene);
CxeError::Id setVideoScene(const QString &newScene);
public: // own helper methods
void setRuntimeValues(QString &key, QList<QVariant> value);
void initDefaultCameraSettings();
+ void initRuntimeSettings();
void testSetCurrenImageScene();
void testSetCurrenVideoScene();
@@ -50,9 +51,10 @@
private:
- QMap<QString, QList<QVariant> > mStore;
QHash<QString, QVariant> mSettingStore;
- CxeScene mDummyScene;
+ QHash<QString, QVariantList> mRuntimeSettings;
+ CxeScene mDummyImageScene;
+ CxeScene mDummyVideoScene;
Cxe::CameraMode mDummyCameraMode;
};
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakesettingsstore.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakesettingsstore.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -30,13 +30,28 @@
mSettingKeyHash.insert(CxeSettingIds::FNAME_MONTH_FOLDER, QVariant("08042009"));
mSettingKeyHash.insert(CxeSettingIds::FNAME_IMAGE_COUNTER, QVariant(0));
mSettingKeyHash.insert(CxeSettingIds::FNAME_VIDEO_COUNTER, QVariant(0));
+
+ mSettingKeyHash.insert(CxeSettingIds::CAMERA_MODE, QVariant(0));
+ mSettingKeyHash.insert(CxeSettingIds::FLASH_MODE, QVariant(0));
+ mSettingKeyHash.insert(CxeSettingIds::IMAGE_SCENE, QVariant("image_scene_auto"));
+ mSettingKeyHash.insert(CxeSettingIds::VIDEO_SCENE, QVariant("video_scene_auto"));
+ mSettingKeyHash.insert(CxeSettingIds::STILL_SHOWCAPTURED, QVariant(0));
+ mSettingKeyHash.insert(CxeSettingIds::VIDEO_SHOWCAPTURED, QVariant(0));
+ mSettingKeyHash.insert(CxeSettingIds::VIDEO_MUTE_SETTING, QVariant(0));
+
+ mSettingKeyHash.insert(CxeSettingIds::GEOTAGGING, QVariant(0));
+ mSettingKeyHash.insert(CxeSettingIds::GEOTAGGING_DISCLAIMER, QVariant(1));
+ mSettingKeyHash.insert(CxeSettingIds::FACE_TRACKING, QVariant(1));
+ mSettingKeyHash.insert(CxeSettingIds::IMAGE_QUALITY, QVariant(0));
+ mSettingKeyHash.insert(CxeSettingIds::VIDEO_QUALITY, QVariant(0));
+
}
CxeFakeSettingsStore::~CxeFakeSettingsStore()
{
}
-/*
+/*!
* Reads a value from cenrep
* @param "key" - setting key
* @param "value" - setting value read from cenrep
@@ -55,14 +70,14 @@
return error;
}
-/*
+/*!
* Reads a value from cenrep
* @param "uid" - UID of the component that own setting key
* @param "key" - setting key id
* @param "type" - type of setting key
* @param "value" - setting value read from cenrep
*/
-void CxeFakeSettingsStore::get(long int uid, unsigned long int key, Cxe::SettingKeyType type, QVariant &value)
+void CxeFakeSettingsStore::startMonitoring(long int uid, unsigned long int key, Cxe::SettingKeyType type, QVariant &value)
{
Q_UNUSED(uid);
Q_UNUSED(key);
@@ -72,7 +87,7 @@
// no support yet
}
-/*
+/*!
* Reads/loads all run-time settings values from cenrep
* @param QList<QString> contains list of all runtime key ids which we use to load values from cenrep.
* returns: QHash container, "contains" values associated with each key that are read from cenrep
@@ -106,7 +121,7 @@
}
-/*
+/*!
* Sets a new value to cenrep
* @param "key" - setting key
* @param "newValue" - new value set to the key in cenrep
@@ -121,7 +136,7 @@
return error;
}
-/*
+/*!
* resets the cenrep store
*/
void CxeFakeSettingsStore::reset()
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakesettingsstore.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakesettingsstore.h Thu Jul 15 01:55:05 2010 +0300
@@ -30,7 +30,7 @@
public: // from base class
void reset();
CxeError::Id get(const QString& key, QVariant &value);
- void get(long int uid, unsigned long int key, Cxe::SettingKeyType type, QVariant &value);
+ void startMonitoring(long int uid, unsigned long int key, Cxe::SettingKeyType type, QVariant &value);
CxeError::Id set(const QString& key,const QVariant newValue);
QHash<QString, QVariantList> loadRuntimeSettings(QList<QString>& keylist);
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakevideocapturecontrol.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakevideocapturecontrol.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -16,6 +16,7 @@
*/
#include <QPixmap>
+#include <QImage>
#include "cxefakequalitypresets.h"
#include "cxefakevideocapturecontrol.h"
#include "cxutils.h"
@@ -61,7 +62,7 @@
CX_DEBUG_ENTER_FUNCTION();
emit videoComposed(CxeError::None, filename());
- emit snapshotReady(CxeError::None, snapshot(), filename());
+ emit snapshotReady(CxeError::None, QImage(), filename());
CX_DEBUG_EXIT_FUNCTION();
}
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakevideorecorderutility.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakevideorecorderutility.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -35,104 +35,86 @@
: mObserver( &aObserver )
{
CX_DEBUG_IN_FUNCTION();
- //return new (ELeave) CxeFakeVideoRecorderUtility(aObserver);
}
-/*CxeVideoRecorderUtility* CxeFakeVideoRecorderUtility::NewL(MVideoRecorderUtilityObserver& aObserver,
- TInt aPriority,
- TMdaPriorityPreference aPref)
-{
- CX_DEBUG_IN_FUNCTION();
- return new (ELeave) CxeFakeVideoRecorderUtility(aObserver);
-}*/
-
-TInt CxeFakeVideoRecorderUtility::CustomCommandSync(const TMMFMessageDestinationPckg& aDestination,
- TInt aFunction,
- const TDesC8& aDataTo1,
- const TDesC8& aDataTo2)
-{
- CX_DEBUG_IN_FUNCTION();
- return KErrNone;
-}
-
-void CxeFakeVideoRecorderUtility::OpenFileL(const TDesC& aFileName,
- TInt aCameraHandle,
- TUid aControllerUid,
- TUid aVideoFormat,
- const TDesC8& aVideoType,
- TFourCC aAudioType)
+void CxeFakeVideoRecorderUtility::open(int cameraHandle,
+ const QString &/*filename*/,
+ const QString &/*fileMimeType*/,
+ const QString &/*supplier*/,
+ const QString &/*videoType*/,
+ const QString &/*audioType*/)
{
CX_DEBUG_ENTER_FUNCTION();
mObserver->MvruoOpenComplete(KErrNone);
CX_DEBUG_EXIT_FUNCTION();
}
-void CxeFakeVideoRecorderUtility::SetVideoFrameSizeL(TSize aSize)
+void CxeFakeVideoRecorderUtility::setVideoFrameSize(const QSize &/*size*/)
{
CX_DEBUG_IN_FUNCTION();
}
-void CxeFakeVideoRecorderUtility::SetVideoFrameRateL(TInt aRate)
+void CxeFakeVideoRecorderUtility::setVideoFrameRate(int rate)
{
CX_DEBUG_IN_FUNCTION();
}
-void CxeFakeVideoRecorderUtility::SetVideoBitRateL(TInt aRate)
+void CxeFakeVideoRecorderUtility::setVideoBitRate(int rate)
{
CX_DEBUG_IN_FUNCTION();
}
-void CxeFakeVideoRecorderUtility::SetAudioEnabledL(TBool aEnable)
+void CxeFakeVideoRecorderUtility::setAudioEnabled(bool enabled)
{
CX_DEBUG_IN_FUNCTION();
}
-void CxeFakeVideoRecorderUtility::SetMaxClipSizeL(TInt aClipSizeInBytes)
+void CxeFakeVideoRecorderUtility::setVideoMaxSize(int sizeInBytes)
{
CX_DEBUG_IN_FUNCTION();
}
-void CxeFakeVideoRecorderUtility::Close()
+void CxeFakeVideoRecorderUtility::close()
{
CX_DEBUG_IN_FUNCTION();
}
-void CxeFakeVideoRecorderUtility::Prepare()
+void CxeFakeVideoRecorderUtility::prepare()
{
CX_DEBUG_ENTER_FUNCTION();
mObserver->MvruoPrepareComplete(KErrNone);
CX_DEBUG_EXIT_FUNCTION();
}
-void CxeFakeVideoRecorderUtility::Record()
+void CxeFakeVideoRecorderUtility::record()
{
CX_DEBUG_IN_FUNCTION();
}
-int CxeFakeVideoRecorderUtility::Stop()
+void CxeFakeVideoRecorderUtility::stop(bool asynchronous)
{
- CX_DEBUG_IN_FUNCTION();
+ CX_DEBUG_ENTER_FUNCTION();
mObserver->MvruoRecordComplete(KErrNone);
- return KErrNone;
+ CX_DEBUG_EXIT_FUNCTION();
}
-void CxeFakeVideoRecorderUtility::PauseL()
+void CxeFakeVideoRecorderUtility::pause()
{
CX_DEBUG_IN_FUNCTION();
}
-TTimeIntervalMicroSeconds CxeFakeVideoRecorderUtility::RecordTimeAvailable()
+int CxeFakeVideoRecorderUtility::availableRecordingTime()
{
CX_DEBUG_IN_FUNCTION();
// 100 s
- return TTimeIntervalMicroSeconds(100000000);
+ return 100;
}
-TTimeIntervalMicroSeconds CxeFakeVideoRecorderUtility::DurationL()
+int CxeFakeVideoRecorderUtility::duration()
{
CX_DEBUG_IN_FUNCTION();
// 10 s
- return TTimeIntervalMicroSeconds(10000000);
+ return 10;
}
--- a/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakevideorecorderutility.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/fakeclasses/cxefakevideorecorderutility.h Thu Jul 15 01:55:05 2010 +0300
@@ -29,32 +29,25 @@
TMdaPriorityPreference aPref=EMdaPriorityPreferenceTimeAndQuality);
~CxeFakeVideoRecorderUtility();
+ virtual void open(int cameraHandle,
+ const QString &filename,
+ const QString &fileMimeType,
+ const QString &supplier,
+ const QString &videoType,
+ const QString &audioType);
+ virtual void setVideoFrameSize(const QSize& size);
+ virtual void setVideoFrameRate(int rate);
+ virtual void setVideoBitRate(int rate);
+ virtual void setAudioEnabled(bool enabled);
+ virtual void setVideoMaxSize(int sizeInBytes);
+ virtual void close();
+ virtual void prepare();
+ virtual void record();
+ virtual void stop(bool asynchronous = false);
+ virtual void pause();
+ virtual int availableRecordingTime();
+ virtual int duration();
- //CxeVideoRecorderUtility* NewL(MVideoRecorderUtilityObserver& aObserver,
- // TInt aPriority=EMdaPriorityNormal,
- // TMdaPriorityPreference aPref=EMdaPriorityPreferenceTimeAndQuality);
- TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination,
- TInt aFunction,
- const TDesC8& aDataTo1,
- const TDesC8& aDataTo2);
- void OpenFileL(const TDesC& aFileName,
- TInt aCameraHandle,
- TUid aControllerUid,
- TUid aVideoFormat,
- const TDesC8& aVideoType = KNullDesC8,
- TFourCC aAudioType = KMMFFourCCCodeNULL);
- void SetVideoFrameSizeL(TSize aSize);
- void SetVideoFrameRateL(TInt aRate);
- void SetVideoBitRateL(TInt aRate);
- void SetAudioEnabledL(TBool aEnable);
- void SetMaxClipSizeL(TInt aClipSizeInBytes);
- void Close();
- void Prepare();
- void Record();
- int Stop();
- void PauseL();
- TTimeIntervalMicroSeconds RecordTimeAvailable();
- TTimeIntervalMicroSeconds DurationL();
private:
CxeFakeVideoRecorderUtility(MVideoRecorderUtilityObserver& aObserver);
--- a/camerauis/cameraxui/cxengine/tsrc/unit/cxeunitrunner/cxetestrunner.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/cxeunitrunner/cxetestrunner.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -66,7 +66,11 @@
<< "unittest_cxethumbnailmanagersymbian"
<< "unittest_cxeharvestercontrolsymbian"
<< "unittest_cxesettingscontrolsymbian"
- << "unittest_cxeenginesymbian";
+ << "unittest_cxesnapshotcontrol"
+ << "unittest_cxeenginesymbian"
+ << "unittest_cxegeotaggingtrail"
+ << "unittest_cxememorymonitor"
+ << "unittest_cxediskmonitor";
QDir dir;
dir.mkpath(logFileFolder);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/system_include/locationtrailpskeys.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2006-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: Definition file for Location Trail PS keys.
+*
+*/
+
+#ifndef __LOCATIONTRAILPSKEYS_H__
+#define __LOCATIONTRAILPSKEYS_H__
+
+const TUid KPSUidLocationTrail = { 0x200071BE };
+
+/**
+ * Used by location trail, indicating location trail state changes.
+ *
+ * Possible values:
+ * 0: Location trail stopped.
+ * 1: Location trail started, waiting for valid GPS data.
+ * 2: Location trail started, searching GPS device.
+ * 3: Location trail started.
+ */
+const TUint32 KLocationTrailState = 0x00000001;
+
+
+#endif // __LOCATIONTRAILPSKEYS_H__
+
+// End of file.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/system_include/rlocationtrail.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2010 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 "rlocationtrail.h"
+
+RLocationTrail::RLocationTrail()
+{
+}
+
+RLocationTrail::~RLocationTrail()
+{
+}
+
+TInt RLocationTrail::Connect()
+{
+ return KErrNone;
+}
+
+void RLocationTrail::Close()
+{
+}
+
+TInt RLocationTrail::StartLocationTrail(TTrailCaptureSetting aState)
+{
+ return KErrNone;
+}
+
+TInt RLocationTrail::StopLocationTrail()
+{
+ return KErrNone;
+}
+
+TInt RLocationTrail::GetLocationTrailState( TTrailState& aState )
+{
+ return KErrNone;
+}
+
+void RLocationTrail::NotifyLocationTrailStateChange( TRequestStatus& aStatus )
+{
+}
+
+void RLocationTrail::CancelNotificationRequest()
+{
+}
+
+TInt RLocationTrail::RetrieveLocation( const TTime& aTimeStamp,
+ TLocationData& aLocationData,
+ TTrailState& aState )
+{
+ return KErrNone;
+}
+
+void RLocationTrail::CurrentLocation( TRequestStatus& aStatus,
+ TLocationData& aLocationData)
+{
+}
+
+void RLocationTrail::CancelLocationRequest()
+{
+}
+
+TInt RLocationTrail::GetTrailCaptureSetting( TTrailCaptureSetting& aCaptureSetting )
+{
+ return KErrNone;
+}
+
+// end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/system_include/rlocationtrail.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef R_RLOCATIONTRAIL_H
+#define R_RLOCATIONTRAIL_H
+
+#include <e32base.h>
+#include <etel3rdparty.h>
+#include <lbsposition.h>
+#include <locationdatatype.h>
+
+typedef TPckg<TLocality> TLocalityPckg;
+
+/**
+ * RLocationManager dummy.
+ */
+class RLocationTrail
+ {
+public:
+
+ enum TTrailState
+ {
+ ETrailStopped,
+ EWaitingGPSData,
+ ESearchingGPS,
+ ETrailStarted,
+ ETrailStopping,
+ ETrailStarting
+ };
+ enum TTrailCaptureSetting
+ {
+ EOff,
+ ECaptureNetworkInfo,
+ ECaptureAll
+ };
+
+public:
+ RLocationTrail();
+ ~RLocationTrail();
+
+ TInt Connect();
+ void Close();
+
+ TInt StartLocationTrail(TTrailCaptureSetting aState);
+ TInt StopLocationTrail();
+ TInt GetLocationTrailState( TTrailState& aState );
+ void NotifyLocationTrailStateChange( TRequestStatus& aStatus );
+ void CancelNotificationRequest();
+ TInt RetrieveLocation( const TTime& aTimeStamp,
+ TLocationData& aLocationData,
+ TTrailState& aState );
+ void CurrentLocation( TRequestStatus& aStatus,
+ TLocationData& aLocationData);
+ void CancelLocationRequest();
+ TInt GetTrailCaptureSetting( TTrailCaptureSetting& aCaptureSetting );
+ };
+
+#endif // R_RLOCATIONTRAIL_H
+
+// end of file
--- a/camerauis/cameraxui/cxengine/tsrc/unit/system_include/thumbnailmanager_qt.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/system_include/thumbnailmanager_qt.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -27,11 +27,15 @@
* ThumbnailManager::ThumbnailManager
*/
ThumbnailManager::ThumbnailManager(QObject* parentPtr)
+ : mTimer(this)
{
Q_UNUSED(parentPtr);
mCurrentThumbnailId = 0;
mThumbnailManagerIds.clear();
+ mTimer.setSingleShot(true);
+ connect(&mTimer, SIGNAL(timeout()),
+ this, SLOT(emulateThumbnailReady()));
}
@@ -53,9 +57,33 @@
Q_UNUSED(priority);
+ int id = 0;
+
+ if (filename.isNull() || filename.isEmpty()) {
+ id = -1;
+ } else {
+ // generate thumbnail id
+ id = mCurrentThumbnailId;
+ mThumbnailManagerIds.append(mCurrentThumbnailId++);
+ }
+
+ // try emulating thumbnail ready
+ mTimer.start(1000);
+
+ CX_DEBUG_EXIT_FUNCTION();
+
+ return id;
+}
+
+int ThumbnailManager::setThumbnail( const QImage& source, const QString& fileName,
+ void *clientData, int priority)
+{
+ Q_UNUSED(clientData);
+ Q_UNUSED(priority);
+
int status = KErrNone;
- if (filename.isNull() || filename.isEmpty()) {
+ if (fileName.isNull() || fileName.isEmpty()) {
status = KErrNotFound;
} else {
// generate thumbnail id
@@ -65,14 +93,12 @@
emit thumbnailReady(QPixmap(), clientData, mCurrentThumbnailId, status);
mCurrentThumbnailId++;
-
+
CX_DEBUG_EXIT_FUNCTION();
- return status;
+ return mCurrentThumbnailId;
}
-
-
/*!
* start canceling creating thumbnail operation
*/
@@ -80,3 +106,21 @@
{
return mThumbnailManagerIds.contains(id);
}
+
+
+/*!
+* slot that emulates thumbnail ready
+*/
+void ThumbnailManager::emulateThumbnailReady()
+{
+ // get the current thumbnail id
+ int id = mCurrentThumbnailId - 1;
+ int status = KErrNone;
+
+ if (id == -1) {
+ // if there are no valid thumbnails
+ status = KErrNotFound;
+ }
+ emit thumbnailReady(QPixmap(), 0, id, status);
+}
+
--- a/camerauis/cameraxui/cxengine/tsrc/unit/system_include/thumbnailmanager_qt.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/system_include/thumbnailmanager_qt.h Thu Jul 15 01:55:05 2010 +0300
@@ -21,6 +21,7 @@
#include <qobject>
#include <QPixmap.h>
#include <QStringList>
+#include <QTimer>
class ThumbnailManager : public QObject
@@ -63,6 +64,24 @@
int priority = 0);
/**
+ * Set a thumbnail for an object file generated from pixmap delivered.
+ * thumbnailReady() signal will be emited when the operation is complete.
+ *
+ * @param source QImage from which the thumbnail will be created
+ * @param fileName file name
+ * @param clientData Pointer to arbitrary client data.
+ * This pointer is not used by the API for
+ * anything other than returning it in the
+ * ThumbnailReady callback.
+ * @param priority Priority for this operation
+ * @return Thumbnail request ID or -1 if request failed. This can be used to
+ * cancel the request or change priority.
+ *
+ */
+ int setThumbnail( const QImage& source, const QString& fileName,
+ void * clientData = NULL, int priority = 0 );
+
+ /**
* Cancel a thumbnail operation.
*
* @param id Request ID for the operation to be cancelled.
@@ -82,9 +101,13 @@
*/
void thumbnailReady( QPixmap , void * , int , int );
+private slots:
+ void emulateThumbnailReady();
+
private:
int mCurrentThumbnailId;
QList<int> mThumbnailManagerIds;
+ QTimer mTimer;
};
#endif // THUMBNAILMANAGER_QT
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unit.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unit.pro Thu Jul 15 01:55:05 2010 +0300
@@ -42,6 +42,10 @@
unittest_cxequalitypresetssymbian \
unittest_cxethumbnailmanagersymbian \
unittest_cxeharvestercontrolsymbian \
- unittest_cxesettingscontrolsymbian
+ unittest_cxesettingscontrolsymbian \
+ unittest_cxesnapshotcontrol \
+ unittest_cxegeotaggingtrail \
+ unittest_cxediskmonitor \
+ unittest_cxememorymonitor
CONFIG *= ordered
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeautofocuscontrolsymbian/unittest_cxeautofocuscontrolsymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeautofocuscontrolsymbian/unittest_cxeautofocuscontrolsymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -23,13 +23,15 @@
#include "cxetestutils.h"
#include "cxefakecameradevicecontrol.h"
#include "cxefakecameradevice.h"
+#include "cxefakesettings.h"
#include "cxeautofocuscontrolsymbian.h"
#include "unittest_cxeautofocuscontrolsymbian.h"
UnitTestCxeAutoFocusControlSymbian::UnitTestCxeAutoFocusControlSymbian()
- : mAutoFocusControl(0),
- mCameraDeviceControl(0),
- mCameraDevice(0)
+ : mAutoFocusControl(NULL),
+ mCameraDeviceControl(NULL),
+ mCameraDevice(NULL),
+ mFakeSettings(NULL)
{
}
@@ -43,11 +45,13 @@
{
qDebug() << "UnitTestCxeAutoFocusControlSymbian::init =>";
+ mFakeSettings = new CxeFakeSettings();
+
mCameraDeviceControl = new CxeFakeCameraDeviceControl();
mCameraDevice = new CxeFakeCameraDevice();
mCameraDevice->newCamera(mCameraDeviceControl->cameraIndex(), mCameraDeviceControl);
- mAutoFocusControl = new CxeAutoFocusControlSymbian(*mCameraDevice);
+ mAutoFocusControl = new CxeAutoFocusControlSymbian(*mCameraDevice, *mFakeSettings);
//mAutoFocusControl->initializeResources();
connect(mCameraDeviceControl, SIGNAL(cameraEvent(int,int)),
@@ -61,15 +65,18 @@
{
qDebug() << "UnitTestCxeAutoFocusControlSymbian::cleanup =>";
delete mAutoFocusControl;
- mAutoFocusControl = 0;
+ mAutoFocusControl = NULL;
delete mCameraDeviceControl;
- mCameraDeviceControl = 0;
+ mCameraDeviceControl = NULL;
delete mCameraDevice;
- mCameraDevice = 0;
+ mCameraDevice = NULL;
+
+ delete mFakeSettings;
+ mFakeSettings = NULL;
+
qDebug() << "UnitTestCxeAutoFocusControlSymbian::cleanup <=";
-
}
@@ -108,6 +115,15 @@
QVERIFY(mAutoFocusControl->mode() == CxeAutoFocusControl::Portrait);
}
+void UnitTestCxeAutoFocusControlSymbian::testIsFixedFocusMode()
+{
+ QVERIFY(mAutoFocusControl->isFixedFocusMode(CxeAutoFocusControl::Auto) == false);
+ QVERIFY(mAutoFocusControl->isFixedFocusMode(CxeAutoFocusControl::Hyperfocal) == true);
+ QVERIFY(mAutoFocusControl->isFixedFocusMode(CxeAutoFocusControl::Macro) == false);
+ QVERIFY(mAutoFocusControl->isFixedFocusMode(CxeAutoFocusControl::Infinity) == true);
+ QVERIFY(mAutoFocusControl->isFixedFocusMode(CxeAutoFocusControl::Portrait) == false);
+}
+
void UnitTestCxeAutoFocusControlSymbian::testSupported()
{
bool supported = mAutoFocusControl->supported();
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeautofocuscontrolsymbian/unittest_cxeautofocuscontrolsymbian.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeautofocuscontrolsymbian/unittest_cxeautofocuscontrolsymbian.h Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -24,6 +24,7 @@
class CxeAutoFocusControlSymbian;
class CxeFakeCameraDeviceControl;
class CxeFakeCameraDevice;
+class CxeFakeSettings;
class UnitTestCxeAutoFocusControlSymbian : public QObject
{
@@ -40,6 +41,7 @@
void testStart();
void testCancel();
void testMode();
+ void testIsFixedFocusMode();
void testSupported();
@@ -52,6 +54,7 @@
CxeAutoFocusControlSymbian *mAutoFocusControl;
CxeFakeCameraDeviceControl *mCameraDeviceControl;
CxeFakeCameraDevice *mCameraDevice;
+ CxeFakeSettings *mFakeSettings;
};
#endif // UNITTEST_CXEAUTOFOCUSCONTROLSYMBIAN_H
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeautofocuscontrolsymbian/unittest_cxeautofocuscontrolsymbian.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeautofocuscontrolsymbian/unittest_cxeautofocuscontrolsymbian.pro Thu Jul 15 01:55:05 2010 +0300
@@ -1,4 +1,4 @@
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 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"
@@ -33,7 +33,9 @@
cxecameradevice.cpp \
cxefakecameradevice.cpp \
cxecameradevicecontrolsymbian.cpp \
- cxefakecameradevicecontrol.cpp
+ cxefakecameradevicecontrol.cpp \
+ cxefakesettings.cpp
+
HEADERS *= unittest_cxeautofocuscontrolsymbian.h \
cxeautofocuscontrol.h \
cxeautofocuscontrolsymbian.h \
@@ -48,4 +50,6 @@
cxecameradevicecontrol.h \
cxecameradevicecontrolsymbian.h \
cxefakecameradevicecontrol.h \
- cxutils.h
+ cxutils.h \
+ cxefakesettings.h \
+ cxesettings.h
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxecameradevicecontrolsymbian/unittest_cxecameradevicecontrolsymbian.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxecameradevicecontrolsymbian/unittest_cxecameradevicecontrolsymbian.pro Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 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"
@@ -26,6 +26,8 @@
LIBS *= -lfbscli
LIBS *= -lbitgdi
LIBS *= -lsysutil
+LIBS *= -lefsrv
+LIBS *= -lcone
DEFINES *= CXE_USE_DUMMY_CAMERA
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxediskmonitor/cxediskmonitorprivateunit.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,1 @@
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxediskmonitor/cxediskmonitorprivateunit.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef CXEDISKMONITORPRIVATEUNIT_H
+#define CXEDISKMONITORPRIVATEUNIT_H
+
+// Include files
+
+#include "cxediskmonitorprivate.h"
+
+class CxeDiskMonitorPrivateUnit;
+
+
+
+#endif // CXEDISKMONITORPRIVATEUNIT_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxediskmonitor/cxesysutil.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2010 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 "cxesysutil.h"
+#include "cxutils.h"
+
+qint64 CxeSysUtil::mSpaceAvailable = 0;
+
+ /**
+ * Checks if free disk drive storage space is or will fall below critical
+ * level. Static configuration values stored in Central Repository are
+ * used to determine a critical level for each drive.
+ *
+ * If aBytesToWrite is more than zero, function returns false otherwise true.
+ * By defining aBytesToWrite to zero it is possible to get fake fulldisk error.
+ *
+ */
+TBool CxeSysUtil::DiskSpaceBelowCriticalLevel(
+ RFs* /*aFs*/,
+ TInt aBytesToWrite,
+ TInt /*aDrive*/ )
+{
+ CX_DEBUG_IN_FUNCTION();
+
+ if (aBytesToWrite > 0) {
+ return EFalse;
+ }
+ else {
+ return ETrue;
+ }
+}
+
+qint64 CxeSysUtil::spaceAvailable(
+ RFs & /*fs*/,
+ int /*index*/,
+ CxeSettings & /*settings*/)
+{
+ CX_DEBUG_IN_FUNCTION();
+ return CxeSysUtil::mSpaceAvailable;
+}
+
+void CxeSysUtil::setSpaceAvailable(qint64 aSpaceAvailable)
+{
+ CX_DEBUG_IN_FUNCTION();
+ mSpaceAvailable = aSpaceAvailable;
+}
+
+int CxeSysUtil::getCameraDrive(RFs & /*fs*/)
+{
+ CX_DEBUG_IN_FUNCTION();
+ return 1;
+}
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxediskmonitor/cxesysutil.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2010 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: Stub class for testing purposes
+*
+*/
+
+#ifndef CXESYSUTIL_H
+#define CXESYSUTIL_H
+
+#include <e32base.h>
+#include <QObject>
+
+class RFs;
+class CxeSettings;
+
+class CxeSysUtil
+ {
+
+public:
+
+ static TBool DiskSpaceBelowCriticalLevel(
+ RFs* aFs,
+ TInt aBytesToWrite,
+ TInt aDrive);
+
+ static qint64 spaceAvailable(RFs &fs, int index, CxeSettings &settings);
+ static void setSpaceAvailable(qint64 aSpaceAvailable);
+
+ static int getCameraDrive(RFs &fs);
+
+public:
+ static qint64 mSpaceAvailable;
+ };
+
+#endif // CXESYSUTIL_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxediskmonitor/unittest_cxediskmonitor.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2010 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 <QDate>
+#include <QTest>
+#include <QDebug>
+#include <QSignalSpy>
+#include <QThread>
+
+#include "cxetestutils.h"
+#include "cxefakesettings.h"
+#include "cxesysutil.h"
+#include "cxediskmonitor.h"
+#include "unittest_cxediskmonitor.h"
+
+UnitTestCxeDiskMonitor::UnitTestCxeDiskMonitor()
+ : mFakeSettings(NULL),
+ mDiskMonitor(NULL)
+{
+}
+
+UnitTestCxeDiskMonitor::~UnitTestCxeDiskMonitor()
+{
+ cleanup();
+}
+
+// Run before each individual test case
+void UnitTestCxeDiskMonitor::init()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ mFakeSettings = new CxeFakeSettings();
+ mDiskMonitor = new CxeDiskMonitor(*mFakeSettings);
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+// Run after each individual test case
+void UnitTestCxeDiskMonitor::cleanup()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ delete mDiskMonitor;
+ mDiskMonitor = NULL;
+
+ delete mFakeSettings;
+ mFakeSettings = NULL;
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeDiskMonitor::testStart()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mDiskMonitor->start();
+ mDiskMonitor->start(); // testing double run - should not crash
+ QVERIFY(mDiskMonitor->isMonitoring() == true);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeDiskMonitor::testStop()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mDiskMonitor->stop();
+ QVERIFY(mDiskMonitor->isMonitoring() == false);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeDiskMonitor::testIsMonitoring()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mDiskMonitor->start();
+ mDiskMonitor->start();
+ QVERIFY(mDiskMonitor->isMonitoring() == true);
+
+ mDiskMonitor->stop();
+ QVERIFY(mDiskMonitor->isMonitoring() == false);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeDiskMonitor::testFree()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ CxeSysUtil::setSpaceAvailable(0);
+ QVERIFY(mDiskMonitor->free(false) == 0);
+ CxeSysUtil::setSpaceAvailable(100000);
+ QVERIFY(mDiskMonitor->free(false) == 100000);
+ QVERIFY(mDiskMonitor->free(true) == 100000);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeDiskMonitor::testSetLowWarningLevelZero()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mDiskMonitor->setLowWarningLevel(0);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeDiskMonitor::testSetLowWarningLevelTenMegabytes()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mDiskMonitor->setLowWarningLevel(10485760);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeDiskMonitor::testSetLowWarningLevelFiveGigabyte()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mDiskMonitor->setLowWarningLevel(5368709120);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeDiskMonitor::testLowLevelWarningSignal()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ QSignalSpy spy(mDiskMonitor, SIGNAL(diskSpaceLow()));
+ mDiskMonitor->stop();
+ mDiskMonitor->setLowWarningLevel(100);
+ mDiskMonitor->start();
+ CxeSysUtil::setSpaceAvailable(90);
+ CxeTestUtils::waitForSignal(spy, 10000, 1, true);
+ QVERIFY(spy.count() > 0);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeDiskMonitor::testFreeSpaceChangedSignal()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ QSignalSpy spy(mDiskMonitor, SIGNAL(diskSpaceChanged()));
+ mDiskMonitor->stop();
+ mDiskMonitor->setLowWarningLevel(100);
+ mDiskMonitor->start();
+ CxeSysUtil::setSpaceAvailable(110);
+ CxeSysUtil::setSpaceAvailable(120);
+ CxeTestUtils::waitForSignal(spy, 10000, 1, true);
+ QVERIFY(spy.count() > 0);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+QTEST_MAIN(UnitTestCxeDiskMonitor);
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxediskmonitor/unittest_cxediskmonitor.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+#ifndef UNITTEST_CXEDISKMONITOR_H
+#define UNITTEST_CXEDISKMONITOR_H
+
+#include <QObject>
+
+#include "cxenamespace.h"
+
+class CxeDiskMonitor;
+class CxeFakeSettings;
+
+class UnitTestCxeDiskMonitor : public QObject
+{
+ Q_OBJECT
+
+public:
+ UnitTestCxeDiskMonitor();
+ ~UnitTestCxeDiskMonitor();
+
+private slots:
+ void init();
+ void cleanup();
+
+ void testStart();
+ void testStop();
+ void testIsMonitoring();
+ void testFree();
+ void testSetLowWarningLevelZero();
+ void testSetLowWarningLevelTenMegabytes();
+ void testSetLowWarningLevelFiveGigabyte();
+ void testLowLevelWarningSignal();
+ void testFreeSpaceChangedSignal();
+
+private:
+ CxeFakeSettings *mFakeSettings;
+ CxeDiskMonitor *mDiskMonitor;
+};
+
+#endif // UNITTEST_CXEDISKMONITOR_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxediskmonitor/unittest_cxediskmonitor.pro Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,32 @@
+# Copyright (c) 2009-2010 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(../unittest.pri)
+
+TARGET = unittest_cxediskmonitor
+
+DEPENDPATH = . ../../fakeclasses ../../../src/dummyengine ../utils
+INCLUDEPATH = . ../../fakeclasses ../../../src/dummyengine ../utils ../../../traces
+
+DEFINES *= CXE_USE_DUMMY_CAMERA
+
+SOURCES *= unittest_cxediskmonitor.cpp \
+ ./cxesysutil.cpp \
+ cxefakesettings.cpp \
+ ../../../src/cxediskmonitor.cpp \
+ ../../../src/cxediskmonitorprivate.cpp
+
+HEADERS *= unittest_cxediskmonitor.h \
+ ./cxesysutil.h \
+ ../../../inc/api/cxesettings.h \
+ cxefakesettings.h \
+ ../../../inc/cxediskmonitor.h \
+ ../../../inc/cxediskmonitorprivate.h
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeenginesymbian/cxeenginesymbianunit.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeenginesymbian/cxeenginesymbianunit.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -27,15 +27,18 @@
#include "cxefakesensoreventhandler.h"
#include "cxefakefilenamegenerator.h"
#include "cxutils.h"
+#include "cxefakesettingsmodel.h"
// Member Functions
CxeEngineSymbianUnit::CxeEngineSymbianUnit()
{
+ CX_DEBUG_IN_FUNCTION();
}
CxeEngineSymbianUnit::~CxeEngineSymbianUnit()
{
+ CX_DEBUG_IN_FUNCTION();
}
@@ -67,6 +70,10 @@
mVideoCaptureControl = new CxeFakeVideoCaptureControl();
+ mSettingsModel = new CxeFakeSettingsModel();
+
+ mFeatureManager = new CxeFakeFeatureManager();
+
}
CX_DEBUG_EXIT_FUNCTION();
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeenginesymbian/cxeenginesymbianunit.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeenginesymbian/cxeenginesymbianunit.h Thu Jul 15 01:55:05 2010 +0300
@@ -27,6 +27,7 @@
CxeEngineSymbianUnit();
virtual ~CxeEngineSymbianUnit();
+protected:
void createControls();
};
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeenginesymbian/unittest_cxeenginesymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeenginesymbian/unittest_cxeenginesymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -42,6 +42,7 @@
delete mEngine;
mEngine = NULL;
mEngine = new CxeEngineSymbianUnit();
+ mEngine->construct();
mEngine->initMode(Cxe::ImageMode);
mCameraDeviceControl = qobject_cast<CxeFakeCameraDeviceControl*>(
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeenginesymbian/unittest_cxeenginesymbian.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeenginesymbian/unittest_cxeenginesymbian.pro Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 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"
@@ -41,10 +41,9 @@
LIBS *= -lsensrvclient
LIBS *= -lsensrvutil
LIBS *= -limagingconfigmanager
-LIBS *= -lalfclient
-LIBS *= -lalfdecoderserverclient
LIBS *= -lxqserviceutil
LIBS *= -loommonitor
+LIBS += -llocationmanager
SOURCES *= unittest_cxeenginesymbian.cpp \
@@ -102,7 +101,12 @@
cxediskmonitor.cpp \
cxediskmonitorprivate.cpp \
cxememorymonitor.cpp \
- cxememorymonitorprivate.cpp
+ cxememorymonitorprivate.cpp \
+ cxesnapshotcontrol.cpp \
+ cxesnapshotcontrolprivate.cpp \
+ cxefakesettingsmodel.cpp \
+ cxegeotaggingtrail.cpp \
+ cxegeotaggingtrailprivate.cpp
@@ -174,4 +178,9 @@
cxediskmonitor.h \
cxediskmonitorprivate.h \
cxememorymonitor.h \
- cxememorymonitorprivate.h
+ cxememorymonitorprivate.h \
+ cxesnapshotcontrol.h \
+ cxesnapshotcontrolprivate.h \
+ cxefakesettingsmodel.h \
+ cxegeotaggingtrail.h \
+ cxegeotaggingtrailprivate.h
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefeaturemanagerimp/unittest_cxefeaturemanagerimp.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefeaturemanagerimp/unittest_cxefeaturemanagerimp.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -20,6 +20,12 @@
#include "unittest_cxefeaturemanagerimp.h"
#include "cxefakesettingsmodel.h"
#include "cxefeaturemanagerimp.h"
+#include "cxenamespace.h"
+
+
+static const char* INVALID_KEY = "invalid key";
+static const char* EMPTY_KEY = "";
+
UnitTestCxeFeatureManager::UnitTestCxeFeatureManager()
: mFakeSettingsModel(NULL), mFeatureManager(NULL)
@@ -34,6 +40,7 @@
// Run before each individual test case
void UnitTestCxeFeatureManager::init()
{
+ // fake model contains initialized test data.
mFakeSettingsModel = new CxeFakeSettingsModel();
mFeatureManager = new CxeFeatureManagerImp(*mFakeSettingsModel);
}
@@ -49,34 +56,25 @@
}
// Testing that isFeatureSupported function returns correct values
-void UnitTestCxeFeatureManager::testSupportedKeys()
+void UnitTestCxeFeatureManager::testIsFeatureSupported()
{
- // Create a key that won't be added to test data
- QString falseKey = QString("testKeyFalse");
bool isSupported;
CxeError::Id err;
+ QString key;
- // Test that key that is not added to test data is not found
- // also boolean value isSupported should return false as key is not found
- err = mFeatureManager->isFeatureSupported(falseKey, isSupported);
+ // test that invalid key is not found.
+ err = mFeatureManager->isFeatureSupported(INVALID_KEY, isSupported);
+ QVERIFY(!isSupported);
+ QCOMPARE(err, CxeError::NotFound);
+
+ // try with empty key
+ err = mFeatureManager->isFeatureSupported(EMPTY_KEY, isSupported);
QVERIFY(!isSupported);
QCOMPARE(err, CxeError::NotFound);
- // create and set test data with "testKeyTrue" key
- QString trueKey = QString("testKeyTrue");
- QList<QVariant> value;
- value.append(1);
- value.append(2);
- value.append(3);
- mFakeSettingsModel->set(trueKey, value);
-
- // the false key should return the same values as before adding true key to test data
- err = mFeatureManager->isFeatureSupported(falseKey, isSupported);
- QVERIFY(!isSupported);
- QCOMPARE(err, CxeError::NotFound);
-
- // check that just added key can be found from test data and no error occurs
- err = mFeatureManager->isFeatureSupported(trueKey, isSupported);
+ // test with right key
+ key = CxeRuntimeKeys::PRIMARY_CAMERA_CAPTURE_KEYS;
+ err = mFeatureManager->isFeatureSupported(key, isSupported);
QVERIFY(isSupported);
QCOMPARE(err, CxeError::None);
@@ -84,82 +82,30 @@
// test that configuredValues function returns a correct error code and not any values
// with any arbitrary key when there is no data set
-void UnitTestCxeFeatureManager::testConfiguredValuesEmptyData()
+void UnitTestCxeFeatureManager::testconfiguredValues()
{
- QString falseKey = QString("testKeyFalse");
QList<int> values;
CxeError::Id err;
+ QString key;
- // no data
- err = mFeatureManager->configuredValues(falseKey,values);
+ // case 1: test with invalid key
+ err = mFeatureManager->configuredValues(INVALID_KEY, values);
QCOMPARE(err, CxeError::NotFound);
QCOMPARE(values.count(), 0);
-
-}
-
-// test that configuredValues function returns a correct error code and not any values
-// with any arbitrary key when there is data set but not for false key
-void UnitTestCxeFeatureManager::testConfiguredValuesFalseKey()
-{
- QString falseKey = QString("testKeyFalse");
- QString trueKey = QString("testKeyTrue");
- QList<QVariant> value;
- value.append(1);
- value.append(2);
- value.append(3);
- mFakeSettingsModel->set(trueKey, value);
-
- CxeError::Id err;
- QList<int> values;
-
- // false key
- err = mFeatureManager->configuredValues(falseKey, values);
+
+ // case 2: test with empty key
+ err = mFeatureManager->configuredValues(EMPTY_KEY, values);
QCOMPARE(err, CxeError::NotFound);
- // as key is not found values list should be empty
QCOMPARE(values.count(), 0);
+
+ // case 3: test with right key
+ key = CxeRuntimeKeys::VIDEO_MAX_ZOOM_LIMITS;
+ err = mFeatureManager->configuredValues(key, values);
+ QCOMPARE(err, CxeError::None);
+ QVERIFY(values.count() > 0);
+
}
-// test data is set with the same key that is used for fetching configured values
-// Now error code should be None as the key should be found from the data
-// Also value count should match with the amount of set values
-void UnitTestCxeFeatureManager::testConfiguredValuesTrueKeyAndData()
-{
- QString trueKey = QString("testKeyTrue");
- QList<QVariant> value;
- // values added to key
- value.append(1);
- value.append(2);
- value.append(3);
- mFakeSettingsModel->set(trueKey, value);
-
- CxeError::Id err;
- QList<int> values;
-
- // true key
- err = mFeatureManager->configuredValues(trueKey, values);
- QCOMPARE(err, CxeError::None);
- QCOMPARE(values.count(), 3);
-}
-
-// Currently only integer type values can be fetched with configuredValues-function.
-// Test that proper error code is returned when data values are something else than integers
-void UnitTestCxeFeatureManager::testConfiguredValuesFalseData()
-{
- QString trueKey = QString("testKeyTrue");
- QList<QVariant> value;
- value.append(1);
- value.append(2);
- value.append(true); // add boolean value which is not supported
- mFakeSettingsModel->set(trueKey, value);
-
- CxeError::Id err;
- QList<int> values;
-
- // getting configured values should fail as boolean values are not supported
- err = mFeatureManager->configuredValues(trueKey, values);
- QCOMPARE(err, CxeError::NotSupported);
-
-}
// main() function non-GUI testing
QTEST_MAIN(UnitTestCxeFeatureManager);
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefeaturemanagerimp/unittest_cxefeaturemanagerimp.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefeaturemanagerimp/unittest_cxefeaturemanagerimp.h Thu Jul 15 01:55:05 2010 +0300
@@ -34,11 +34,8 @@
void init();
void cleanup();
- void testSupportedKeys();
- void testConfiguredValuesEmptyData();
- void testConfiguredValuesFalseKey();
- void testConfiguredValuesTrueKeyAndData();
- void testConfiguredValuesFalseData();
+ void testIsFeatureSupported();
+ void testconfiguredValues();
private:
CxeFakeSettingsModel *mFakeSettingsModel;
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefeaturemanagerimp/unittest_cxefeaturemanagerimp.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefeaturemanagerimp/unittest_cxefeaturemanagerimp.pro Thu Jul 15 01:55:05 2010 +0300
@@ -19,4 +19,5 @@
HEADERS *= unittest_cxefeaturemanagerimp.h \
cxefeaturemanagerimp.h \
cxefakesettingsmodel.h \
- cxeerror.h
+ cxeerror.h \
+ cxenamespace.h
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefilenamegeneratorsymbian/unittest_cxefilenamegeneratorsymbian.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefilenamegeneratorsymbian/unittest_cxefilenamegeneratorsymbian.pro Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 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"
@@ -20,6 +20,8 @@
LIBS *= -lplatformenv
LIBS *= -lsysutil
+LIBS *= -lefsrv
+LIBS *= -lcone
SOURCES *= unittest_cxefilenamegeneratorsymbian.cpp \
cxefakesettings.cpp \
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefilesavethreadsymbian/unittest_cxefilesavethreadsymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefilesavethreadsymbian/unittest_cxefilesavethreadsymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -72,7 +72,7 @@
// Case 0: Checking if a file is saved with all valid parameters
const int index(2);
const int id(7);
- CxeImageDataItem *imageDataItem = new CxeFakeImageDataItem(index, QByteArray("unit test successful"), filename, id);
+ CxeImageDataItem *imageDataItem = new CxeFakeImageDataItem(index, QByteArray("unit test successful"), filename, id, false);
QSignalSpy imageItemStateSpy(imageDataItem, SIGNAL(imageSaved(CxeError::Id, const QString&, int)));
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefilesavethreadsymbian/unittest_cxefilesavethreadsymbian.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxefilesavethreadsymbian/unittest_cxefilesavethreadsymbian.pro Thu Jul 15 01:55:05 2010 +0300
@@ -1,4 +1,4 @@
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 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"
@@ -21,7 +21,8 @@
LIBS *= -lsysutil
LIBS *= -lplatformenv
-
+LIBS *= -lefsrv
+LIBS *= -lcone
SOURCES *= unittest_cxefilesavethreadsymbian.cpp \
thumbnailmanager_qt.cpp \
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeharvestercontrolsymbian/unittest_cxeharvestercontrolsymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeharvestercontrolsymbian/unittest_cxeharvestercontrolsymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -22,9 +22,12 @@
#include "unittest_cxeharvestercontrolsymbian.h"
#include "cxeharvestercontrolsymbian.h"
#include "cxutils.h"
+#include "cxeerror.h"
UnitTestCxeHarvesterControlSymbian::UnitTestCxeHarvesterControlSymbian()
+ : mHarvesterControl(NULL)
{
+ qRegisterMetaType<CxeError::Id>("CxeError::Id");
}
@@ -49,35 +52,30 @@
{
CX_DEBUG_ENTER_FUNCTION();
- QSignalSpy harvestCompleteSpy(mHarvesterControl, SIGNAL(fileHarvested(const QString&, int)));
+ QSignalSpy harvestCompleteSpy(mHarvesterControl, SIGNAL(fileHarvested(CxeError::Id, const QString&)));
QString filename;
+ QVariantList initModeArguments;
QVERIFY(harvestCompleteSpy.isValid());
// case 1: testing with wrong dummy file, we should get an error code with harvestcomplete
// since filename is invalid
mHarvesterControl->harvestFile(filename, 0, 0);
-
QCOMPARE( harvestCompleteSpy.count(), 1 );
- if (harvestCompleteSpy.count() > 0) {
- QList<QVariant> initModeArguments = harvestCompleteSpy.takeFirst();
- // we are only interested in error code in this case 1
- QCOMPARE(initModeArguments.at(1).toInt(), KErrNotFound);
- }
-
+ initModeArguments = harvestCompleteSpy.takeFirst();
+ // we are only interested in error code in this case 1
+ QCOMPARE(initModeArguments.at(0).value<CxeError::Id>(), CxeError::NotFound);
// case 2: testing with real filename, harvesting should go fine, callback without errors
filename = QString("test.jpg");
mHarvesterControl->harvestFile(filename, 0, 0);
QCOMPARE( harvestCompleteSpy.count(), 1 );
- if (harvestCompleteSpy.count() > 0) {
- QList<QVariant> initModeArguments = harvestCompleteSpy.takeFirst();
- // we check both the filename, since in this case harvesting should go fine
- // and error returned is KErrNone.
- QCOMPARE(initModeArguments.at(1).toString(), filename);
- QCOMPARE(initModeArguments.at(1).toInt(), KErrNone);
- }
+ initModeArguments = harvestCompleteSpy.takeFirst();
+ // we check both the filename, since in this case harvesting should go fine
+ // and error returned is KErrNone.
+ QCOMPARE(initModeArguments.at(0).value<CxeError::Id>(), CxeError::None);
+ QCOMPARE(initModeArguments.at(1).toString(), filename);
CX_DEBUG_EXIT_FUNCTION();
}
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeharvestercontrolsymbian/unittest_cxeharvestercontrolsymbian.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeharvestercontrolsymbian/unittest_cxeharvestercontrolsymbian.pro Thu Jul 15 01:55:05 2010 +0300
@@ -22,7 +22,8 @@
cxeerrormappingsymbian.h \
cxeharvestercontrolsymbian.h \
harvesterclient.h \
- cxutils.h
+ cxutils.h \
+ cxeerror.h
SOURCES *= unittest_cxeharvestercontrolsymbian.cpp \
cxeerrormappingsymbian.cpp \
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeimagedataitemsymbian/cxeimagedataitemunit.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeimagedataitemsymbian/cxeimagedataitemunit.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -19,8 +19,8 @@
#include "cxutils.h"
#include "cxefakesysutil.h"
-CxeImageDataItemUnit::CxeImageDataItemUnit(int index, QByteArray data, QString filename)
- : CxeImageDataItemSymbian(data, filename, index)
+CxeImageDataItemUnit::CxeImageDataItemUnit(int index, QByteArray data, QString filename, bool addLocation)
+ : CxeImageDataItemSymbian(data, filename, index, addLocation)
{
CX_DEBUG_IN_FUNCTION();
}
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeimagedataitemsymbian/cxeimagedataitemunit.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeimagedataitemsymbian/cxeimagedataitemunit.h Thu Jul 15 01:55:05 2010 +0300
@@ -36,7 +36,7 @@
Q_OBJECT
public:
- CxeImageDataItemUnit(int index, QByteArray data, QString filename);
+ CxeImageDataItemUnit(int index, QByteArray data, QString filename, bool addLocation);
virtual ~CxeImageDataItemUnit();
int checkDiskSpace(RFs* aFs,
TInt aBytesToWrite,
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeimagedataitemsymbian/unittest_cxeimagedataitemsymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeimagedataitemsymbian/unittest_cxeimagedataitemsymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -44,7 +44,7 @@
mPath = generateImageFileName(index);
QByteArray data = "1234";
- mImageDataItem = new CxeImageDataItemUnit(index, data, mPath);
+ mImageDataItem = new CxeImageDataItemUnit(index, data, mPath, false);
QVERIFY(mImageDataItem->state() == CxeImageDataItem::SavePending);
CX_DEBUG_EXIT_FUNCTION();
@@ -96,7 +96,7 @@
delete mImageDataItem;
mImageDataItem = NULL;
- mImageDataItem = new CxeImageDataItemUnit( index, data, path );
+ mImageDataItem = new CxeImageDataItemUnit( index, data, path, false );
returnValue = mImageDataItem->save();
QVERIFY(mImageDataItem->state() == CxeImageDataItem::SaveFailed);
QVERIFY(returnValue == KErrArgument);
@@ -104,7 +104,7 @@
delete mImageDataItem;
mImageDataItem = NULL;
QString filename = generateImageFileNameWithLetter(++index, "C");
- mImageDataItem = new CxeImageDataItemUnit( index, data, filename );
+ mImageDataItem = new CxeImageDataItemUnit( index, data, filename, false );
returnValue = mImageDataItem->save();
QVERIFY(mImageDataItem->state() == CxeImageDataItem::SaveFailed);
QVERIFY(returnValue != KErrNone);
@@ -113,7 +113,7 @@
delete mImageDataItem;
mImageDataItem = NULL;
filename = generateImageFileNameWithLetter(++index, "");
- mImageDataItem = new CxeImageDataItemUnit( index, data, filename );
+ mImageDataItem = new CxeImageDataItemUnit( index, data, filename, false );
returnValue = mImageDataItem->save();
QVERIFY(mImageDataItem->state() == CxeImageDataItem::SaveFailed);
QVERIFY(returnValue != KErrNone);
@@ -122,7 +122,7 @@
delete mImageDataItem;
mImageDataItem = NULL;
filename = generateImageFileNameWithLetter(++index, "12");
- mImageDataItem = new CxeImageDataItemUnit( index, data, filename );
+ mImageDataItem = new CxeImageDataItemUnit( index, data, filename, false );
returnValue = mImageDataItem->save();
QVERIFY(mImageDataItem->state() == CxeImageDataItem::SaveFailed);
QVERIFY(returnValue != KErrNone);
@@ -131,7 +131,7 @@
delete mImageDataItem;
mImageDataItem = NULL;
filename = generateImageFileNameWithLetter(++index, "Edata");
- mImageDataItem = new CxeImageDataItemUnit( index, data, filename );
+ mImageDataItem = new CxeImageDataItemUnit( index, data, filename, false );
returnValue = mImageDataItem->save();
QVERIFY(mImageDataItem->state() == CxeImageDataItem::SaveFailed);
QVERIFY(returnValue != KErrNone);
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeimagedataitemsymbian/unittest_cxeimagedataitemsymbian.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeimagedataitemsymbian/unittest_cxeimagedataitemsymbian.pro Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 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"
@@ -22,7 +22,8 @@
LIBS *= -lsysutil
LIBS *= -lbitgdi
LIBS *= -lws32
-LIBS *= -lsysutil
+LIBS *= -lefsrv
+LIBS *= -lcone
LIBS *= -lecom
LIBS *= -lecampluginsupport
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeimagedataqueuesymbian/cxeimagedataqueueunit.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeimagedataqueuesymbian/cxeimagedataqueueunit.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -32,5 +32,5 @@
CxeImageDataItem *CxeImageDataQueueUnit::createDataItem( int index, const QByteArray& data, const QString& path ) const
{
static int id = 0;
- return new CxeFakeImageDataItem(index, data, path, id++);
+ return new CxeFakeImageDataItem(index, data, path, id++, false);
}
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeimagedataqueuesymbian/unittest_cxeimagedataqueuesymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeimagedataqueuesymbian/unittest_cxeimagedataqueuesymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -83,8 +83,8 @@
{
// Add some items
QByteArray data("test");
- mImageDataQueue->startSave(data, "C:\\Images\\unittest1.jpeg", 0);
- mImageDataQueue->startSave(data, "C:\\Images\\unittest2.jpeg", 1);
+ mImageDataQueue->startSave(data, "C:\\Images\\unittest1.jpeg", 0, false);
+ mImageDataQueue->startSave(data, "C:\\Images\\unittest2.jpeg", 1, false);
// Test that clearing works also with some content.
mImageDataQueue->clear();
@@ -97,8 +97,8 @@
void UnitTestCxeImageDataQueueSymbian::testOperatorAtIndex()
{
QByteArray data("test");
- CxeImageDataItemSymbian* itemIn1 = mImageDataQueue->startSave(data, "C:\\Images\\unittest1.jpeg", 0);
- CxeImageDataItemSymbian* itemIn2 = mImageDataQueue->startSave(data, "C:\\Images\\unittest2.jpeg", 1);
+ CxeImageDataItemSymbian* itemIn1 = mImageDataQueue->startSave(data, "C:\\Images\\unittest1.jpeg", 0, false);
+ CxeImageDataItemSymbian* itemIn2 = mImageDataQueue->startSave(data, "C:\\Images\\unittest2.jpeg", 1, false);
CxeImageDataItem& itemOut1 = (*mImageDataQueue)[0];
CxeImageDataItem& itemOut2 = (*mImageDataQueue)[1];
QVERIFY(itemIn1 == &itemOut1);
@@ -111,7 +111,7 @@
void UnitTestCxeImageDataQueueSymbian::testStartSave()
{
QByteArray data("test");
- CxeImageDataItemSymbian* itemIn = mImageDataQueue->startSave(data, "C:\\Images\\unittest.jpeg", 0);
+ CxeImageDataItemSymbian* itemIn = mImageDataQueue->startSave(data, "C:\\Images\\unittest.jpeg", 0, false);
QVERIFY(itemIn != NULL);
}
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeimagedataqueuesymbian/unittest_cxeimagedataqueuesymbian.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeimagedataqueuesymbian/unittest_cxeimagedataqueuesymbian.pro Thu Jul 15 01:55:05 2010 +0300
@@ -1,4 +1,4 @@
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 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"
@@ -15,6 +15,8 @@
LIBS *= -lsysutil
LIBS *= -lplatformenv
+LIBS *= -lefsrv
+LIBS *= -lcone
SOURCES *= unittest_cxeimagedataqueuesymbian.cpp \
cxeimagedataqueuesymbian.cpp \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxememorymonitor/hal.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 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: Stub implementation of the HAL class for testing purposes
+*
+*/
+
+#include "hal.h"
+
+TInt HAL::Get(TAttribute /*aAttribute*/, TInt& /*aValue*/)
+{
+ return KErrNone;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxememorymonitor/hal.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,206 @@
+// Copyright (c) 1995-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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:
+// Stub class for testing purposes
+//
+// WARNING: This file contains some APIs which are internal and are subject
+// to change without notice. Such APIs should therefore not be used
+// outside the Kernel and Hardware Services package.
+//
+
+#ifndef __HAL_H__
+#define __HAL_H__
+
+#include <e32def.h>
+#include <e32property.h>
+#include "hal_data.h"
+
+/**
+@publishedPartner
+@released
+
+A set of static functions to get and set hardware attributes.
+
+@see HALData
+*/
+class HAL : public HALData
+ {
+public:
+
+ /**
+ Synonyms for the attribute properties
+ HALData::TAttributeProperty, and used in SEntry.
+ */
+ enum TEntryProperty
+ {
+ /**
+ When set, means that an attribute is meaningful on this device.
+ */
+ EEntryValid=0x1,
+
+
+ /**
+ When set, means that an attribute is modifiable.
+ */
+ EEntryDynamic=0x2,
+ };
+
+ /**
+ Defines an entry in the array that is returned in a call to HAL::GetAll().
+ */
+ struct SEntry
+ {
+ /**
+ The properties of the attribute.
+
+ @see HAL::TEntryProperty
+ */
+ TInt iProperties;
+
+ /**
+ The attribute value.
+
+ @see HALData::TAttribute
+ */
+ TInt iValue;
+ };
+public:
+ /**
+ Gets the value of the specified HAL attribute.
+
+ @param aAttribute The HAL attribute.
+ @param aValue On successful return, contains the attribute value.
+ Some attributes may accept aValue as an input as well, to select
+ one of several alternate values. See the documentation for the
+ individual HAL attributes for details of this.
+
+ @return KErrNone, if successful;
+ KErrNotSupported, if the attribute is not defined in the list
+ of attributes, or is not meaningful for this device.
+ KErrArgument, if aValue was invalid (for attributes
+ which take an argument).
+
+ @see HALData::TAttribute
+ @see HALData::TAttributeProperty
+ */
+ static TInt Get(TAttribute aAttribute, TInt& aValue);
+
+
+ /**
+ Sets the specified HAL attribute.
+
+ @param aAttribute The HAL attribute.
+ @param aValue The attribute value.
+
+ @return KErrNone, if successful;
+ KErrNotSupported, if the attribute is not defined in the list
+ of attributes, or is not meaningful for this device, or is
+ not settable.
+
+ @see HALData::TAttribute
+ @see HALData::TAttributeProperty
+
+ @capability WriteDeviceData or other capability specified
+ for individual attributes in TAttribute
+ */
+ static TInt Set(TAttribute aAttribute, TInt aValue);
+
+
+ /**
+ Gets all HAL attributes, and their properties.
+
+ For attributes that are not meaningful on this device (ie. those which have
+ not been defined in the config.hcf file), the attribute value and its
+ associated property value are set to zero in the returned array.
+
+ Attributes for which multiple values can be retrieved
+ ie. EDisplayIsPalettized, EDisplayBitsPerPixel, EDisplayOffsetToFirstPixel,
+ EDisplayOffsetBetweenLines, and EDisplayPaletteEntry will also be zero in
+ the returned array.
+
+ Attributes that allocate resources and open handles are also not returned
+ by this API. Their value and property values will be set to zero in the
+ returned array. Use HAL::Get() for these attributes.
+
+ @param aNumEntries On successful return, contains the total number
+ of HAL attributes.
+ If the function returns KErrNoMemory, this value is set
+ to zero.
+ @param aData On successful return, contains a pointer to an array
+ of SEntry objects, each of which contains an attribute value
+ and its property value. Note that the property value is
+ defined by the HAL::TEntry synonym.
+ If the function returns KErrNoMemory, this pointer is set
+ to NULL.
+
+ @return KErrNone, if succesful;
+ KErrNoMemory, if there is insufficient memory.
+ */
+ static TInt GetAll(TInt& aNumEntries, SEntry*& aData);
+
+
+ /**
+ Gets the value of the specified HAL attribute.
+
+ @param aDeviceNumber The device number. (eg: screen number)
+ @param aAttribute The HAL attribute.
+ @param aValue On successful return, contains the attribute value.
+ Some attributes may accept aValue as an input as well, to select
+ one of several alternate values. See the documentation for the
+ individual HAL attributes for details of this.
+
+
+ @return KErrNone, if successful;
+ KErrNotSupported, if the attribute is not defined in the list
+ of attributes, or is not meaningful for this device.
+ KErrArgument, if aValue was invalid (for attributes
+ which take an argument).
+
+ @see HALData::TAttribute
+ @see HALData::TAttributeProperty
+ */
+ static TInt Get(TInt aDeviceNumber, TAttribute aAttribute, TInt& aValue);
+
+
+ /**
+ Sets the specified HAL attribute.
+
+ @param aDeviceNumber The device number. (eg: screen number)
+ @param aAttribute The HAL attribute.
+ @param aValue The attribute value.
+
+ @return KErrNone, if successful;
+ KErrNotSupported, if the attribute is not defined in the list
+ of attributes, or is not meaningful for this device, or is
+ not settable.
+
+ @see HALData::TAttribute
+ @see HALData::TAttributeProperty
+
+ @capability WriteDeviceData or other capability specified
+ for individual attributes in TAttribute
+ */
+ static TInt Set(TInt aDeviceNumber, TAttribute aAttribute, TInt aValue);
+ };
+
+
+/**
+@internalComponent
+*/
+static const TInt32 KUidHalPropertyKeyBase = 0x1020E306;
+
+__ASSERT_COMPILE(HAL::ENumHalAttributes<256); // only 256 UIDs allocated for HAL property keys
+
+
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxememorymonitor/hal_data.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,1363 @@
+// Copyright (c) 1995-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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:
+// hal\inc\hal_data.h
+// This is a test version of the header, for testing purposes only
+//
+
+
+#ifndef __HAL_DATA_H__
+#define __HAL_DATA_H__
+#define bitmask enum
+
+class HALData
+/**
+@publishedPartner
+@released
+
+Sets of attributes and values used by HAL functions.
+*/
+ {
+public:
+ /**
+ A set of enumerators that identifies hardware attributes.
+ The enumerators are passed to HAL::Get() and HAL::Set().
+
+ They are also used by the HAL accessor functions.
+
+ Note: It is not recommended to use HAL attributes to pass handles from the
+ kernel to user-side clients due to resource overhead's that will affect
+ existing clients of HAL. HAL is designed to allow simply hardware parameters
+ to be shared with user-side clients without resource allocation overheads.
+
+ @see HAL::Get()
+ @see HAL::Set()
+ */
+ enum TAttribute
+ {
+ /**
+ Identifies the manufacturer of a device.
+ If this is not enumerated in TManufacturer, then the manufacturer must
+ obtain a value from the Symbian registry.
+
+ @see HALData::TManufacturer
+ */
+ EManufacturer,
+
+
+ /**
+ The device specific hardware version number, as defined by
+ the device manufacturer.
+ */
+ EManufacturerHardwareRev,
+
+
+ /**
+ The device specific version number, as defined by
+ the device manufacturer.
+ */
+ EManufacturerSoftwareRev,
+
+
+ /**
+ The device specific software version number, as defined by
+ the device manufacturer.
+ */
+ EManufacturerSoftwareBuild,
+
+
+ /**
+ The device specific model number, as defined by
+ the device manufacturer.
+ */
+ EModel,
+
+
+ /**
+ This is the device specific UID, It is unique to the class /model
+ of device. A value must be obtained from Symbian's UID registry for
+ this attribute.
+ */
+ EMachineUid,
+
+
+ /**
+ The Symbian OS specified device family identifier.
+ If the device family is not one of those enumerated by TDeviceFamily,
+ then the licensee must obtain a UID from Symbian for this attribute.
+
+ @see HALData::TDeviceFamily
+ */
+ EDeviceFamily,
+
+
+ /**
+ The Symbian OS specified device family version.
+ */
+ EDeviceFamilyRev,
+
+
+ /**
+ The CPU architecture used by this device. The values are enumerated
+ by TCPU.
+
+ @see HALData::TCPU
+ */
+ ECPU,
+
+
+ /**
+ A revision number for the CPU architecture.
+ */
+ ECPUArch,
+
+
+ /**
+ This is the default ABI used by CPU for user applications.
+ The values are enumerated by HALData::TCPUABI.
+ */
+ ECPUABI,
+
+
+ /**
+ The processor speed in KHz.
+ */
+ ECPUSpeed,
+
+
+ /**
+ The reason for most recent system boot.
+ This is dynamic and readonly; the values are enumerated by
+ TSystemStartupReason.
+
+ @see HALData::TSystemStartupReason
+ */
+ ESystemStartupReason,
+
+
+ /**
+ This is the last exception code, in the case of system reboot.
+ This is dynamic and readonly.
+ */
+ ESystemException,
+
+
+ /**
+ The time between system ticks, in microseconds.
+ */
+ ESystemTickPeriod,
+
+
+ /**
+ The total system RAM, in bytes.
+ */
+ EMemoryRAM,
+
+
+ /**
+ The currently free system RAM.
+
+ This is dynamic and readonly.
+ */
+ EMemoryRAMFree,
+
+
+ /**
+ The total System ROM, in bytes.
+ */
+ EMemoryROM,
+
+
+ /**
+ The MMU page size in bytes.
+ */
+ EMemoryPageSize,
+
+
+ /**
+ Indicates the state of the power supply.
+
+ It has the values:
+ 1 = Power is good (i.e. external power is available,
+ or the 'power' battery is >= low);
+ 0 = otherwise.
+
+ This is dynamic and readonly.
+ */
+ EPowerGood,
+
+
+ /**
+ The System (or 'Main') battery power level.
+ The allowable values are enumerated by TPowerBatteryStatus
+
+ This is dynamic and readonly,
+
+ @see HALData::TPowerBatteryStatus
+ */
+ EPowerBatteryStatus,
+
+
+ /**
+ Indicates whether a backup power supply is available.
+ It has the values:
+ 0 = the device does not support (or need) a backup battery source;
+ 1 = a backup batter source is present.
+ This is dynamic and readonly
+ */
+ EPowerBackup,
+
+
+ /**
+ The power level for backup power.
+
+ It has the values enumerated by TPowerBackupStatus.
+
+ This is dynamic and readonly.
+
+ @see HALData::TPowerBackupStatus
+ */
+ EPowerBackupStatus,
+
+
+ /**
+ Indicates the state of the external power.
+
+ It has the values:
+ 0 = external power is not in use;
+ 1 = external power is in use.
+
+ This is dynamic and readonly.
+ */
+ EPowerExternal,
+
+
+ /**
+ A bitmask that describes the available keyboard types (it may support
+ more than one).
+
+ @see HALData::TKeyboard
+ */
+ EKeyboard,
+
+
+ /**
+ */
+ EKeyboardDeviceKeys,
+
+
+ /**
+ */
+ EKeyboardAppKeys,
+
+
+ /**
+ Indicates whether the device can produce a click sound for
+ each keypress.
+
+ It has the values:
+ 0 = the device cannot produce a click sound for each keypress;
+ 1 = the device can produce a click sound.
+ */
+ EKeyboardClick,
+
+
+ /**
+ The state of keyboard clicking.
+
+ It has the values:
+ 0 = key click disabled;
+ 1 = key click enabled.
+
+ This is dynamic and writeable.
+
+ @capability WriteDeviceData needed to Set this attribute
+ */
+ EKeyboardClickState,
+
+
+ /**
+ The keyboard click volume level.
+
+ It can take a value in the range 0 to EKeyboardClickVolumeMax.
+
+ This is dynamic and writeable.
+
+ @see HALData::EKeyboardClickVolumeMax
+
+ @capability WriteDeviceData needed to Set this attribute
+ */
+ EKeyboardClickVolume,
+
+
+ /**
+ The maximum value for EKeyboardClickVolume.
+
+ @see HALData::EKeyboardClickVolume
+ */
+ EKeyboardClickVolumeMax,
+
+
+ /**
+ The screen horizontal dimension in pixels.
+ */
+ EDisplayXPixels,
+
+
+ /**
+ The screen vertical dimension in pixels.
+ */
+ EDisplayYPixels,
+
+
+ /**
+ The screen horizontal dimension in twips.
+ */
+ EDisplayXTwips,
+
+
+ /**
+ The screen vertical dimension in twips.
+ */
+ EDisplayYTwips,
+
+
+ /**
+ The number of hues (colors or shades of grey) displayable on
+ the screen.
+ */
+ EDisplayColors,
+
+
+ /**
+ The state of the display.
+
+ It has the values:
+ 0 = screen is turned off;
+ 1 = screen is on.
+
+ This is dynamic and writeable.
+
+ @capability PowerMgmt needed to Set this attribute
+ */
+ EDisplayState,
+
+
+ /**
+ The screen contrast level.
+ It can take a value in the range 0 to EDisplayContrastMax.
+
+ This is dynamic and writeable
+
+ @see HALData::EDisplayContrastMax
+
+ @capability WriteDeviceData needed to Set this attribute
+ */
+ EDisplayContrast,
+
+
+ /**
+ The maximum value for EDisplayContrast
+
+ @see HALData::EDisplayContrast
+ */
+ EDisplayContrastMax,
+
+
+ /**
+ Indicates whether there is a backlight on the device.
+
+ It has the values:
+ 0 = there is no screen backlight;
+ 1 = a screen backlight is present.
+ */
+ EBacklight,
+
+
+ /**
+ The current status of the backlight.
+
+ It has the values:
+ 0 = off;
+ 1 = on.
+
+ This is dynamic and writeable.
+
+ @capability WriteDeviceData needed to Set this attribute
+ */
+ EBacklightState,
+
+
+ /**
+ Indicates whether a pen or digitizer is available for input.
+
+ It has the values:
+ 0 = a pen/digitizer is not available for input;
+ 1 = a pen/digitizeris present.
+ */
+ EPen,
+
+
+ /**
+ The pen/digitizer horizontal resolution, in pixels.
+ */
+ EPenX,
+
+
+ /**
+ The pen/digitizer vertical resolution, in pixels.
+ */
+ EPenY,
+
+
+ /**
+ Indicates whether a pen tap will turn the display on.
+
+ It has the values:
+ 0 = a pen tap has no effect;
+ 1 = a pent tap or press enables the display.
+
+ This is dynamic and writeable.
+
+ @capability WriteDeviceData needed to Set this attribute
+ */
+ EPenDisplayOn,
+
+
+ /**
+ Indicates whether the device can produce a click sound for
+ each pen tap.
+
+ It has the values:
+ 0 = the device cannot produce a click sound
+ 1 = production of a click sound is supported by the device.
+ */
+ EPenClick,
+
+
+ /**
+ The state of pen clicking.
+
+ It has the values:
+ 0 = pen clicking is disabled;
+ 1 = pen clicking is enabled.
+
+ This is dynamic and writable.
+
+ @capability WriteDeviceData needed to Set this attribute
+ */
+ EPenClickState,
+
+
+ /**
+ The pen click volume level.
+ It can take a value in the range 0 to EPenClickVolumeMax.
+
+ This value is dynamic and writable.
+
+ @see HALData::EPenClickVolumeMax
+
+ @capability WriteDeviceData needed to Set this attribute
+ */
+ EPenClickVolume,
+
+
+ /**
+ The maximum value for EPenClickVolume.
+
+ @see HALData::EPenClickVolume
+ */
+ EPenClickVolumeMax,
+
+
+ /**
+ Indicates whether a mouse is available for input.
+
+ It has the values:
+ 0 = there is no mouse available pen/digitizer is present;
+ 1 = a mouse is available for input.
+ */
+ EMouse,
+
+
+ /**
+ The mouse horizontal resolution, in pixels.
+ */
+ EMouseX,
+
+
+ /**
+ The mouse vertical resolution, in pixels.
+ */
+ EMouseY,
+
+
+ /**
+ Describes the mouse cursor visibility.
+
+ The value is enumerated by TMouseState.
+
+ This is dynamic and writable.
+ @see HALData::TMouseState
+
+ @capability MultimediaDD needed to Set this attribute
+ */
+ EMouseState,
+
+
+ /**
+ Reserved for future use.
+ @capability MultimediaDD needed to Set this attribute
+ */
+ EMouseSpeed,
+
+
+ /**
+ Reserved for future use.
+ @capability MultimediaDD needed to Set this attribute
+ */
+ EMouseAcceleration,
+
+
+ /**
+ The number of buttons on the mouse.
+ */
+ EMouseButtons,
+
+
+ /**
+ A bitmask defining the state of each button.
+
+ For each bit, it has values:
+ 0 = up;
+ 1 = down.
+
+ This is dynamic and read only.
+ */
+ EMouseButtonState,
+
+
+ /**
+ Defines the state of the case.
+
+ It has the values:
+ 0 = case closed;
+ 1 = case opened.
+
+ This is dynamic and read only.
+ */
+ ECaseState,
+
+
+ /**
+ Indicates whether the device has a case switch, that actions when
+ the case opens and closes.
+
+ It has values:
+ 0 = no;
+ 1 = yes.
+ */
+ ECaseSwitch,
+
+
+ /**
+ Indicates whether the device is to switch on when case opens.
+
+ It has the values:
+ 0 = disable device switchon when the case opens;
+ 1 = enable device switchon when the case opens.
+
+ This is dynamic and writeable.
+
+ @capability WriteDeviceData needed to Set this attribute
+ */
+ ECaseSwitchDisplayOn,
+
+
+ /**
+ Indicates whether the device is to switch off when case close.
+
+ It has the values:
+ 0 = disable device switchoff when the case closes;
+ 1 = enable device switchoff when the case closes.
+
+ This is dynamic and writeable.
+
+ @capability WriteDeviceData needed to Set this attribute
+ */
+ ECaseSwitchDisplayOff,
+
+
+ /**
+ The number of LEDs on the device.
+ */
+ ELEDs,
+
+
+ /**
+ A bitmask defining the state of each LED.
+
+ For each bit, it has values:
+ 0 = off;
+ 1 = on.
+
+ This is dynamic and writeable.
+ */
+ ELEDmask,
+
+
+ /**
+ Indicates how the phone hardware is connected.
+
+ It has the values:
+ 0 = phone hardware is not permanently connected;
+ 1 = phone hardware is permanently connected.
+ */
+ EIntegratedPhone,
+
+
+ /**
+ @capability WriteDeviceData needed to Set this attribute
+ */
+ EDisplayBrightness,
+
+
+ /**
+ */
+ EDisplayBrightnessMax,
+
+
+ /**
+ Indicates the state of the keyboard backlight.
+
+ It has the values:
+ 0 = keyboard backlight is off;
+ 1 = keyboard backlight is on.
+
+ This is dynamic and writeable.
+
+ @capability PowerMgmt needed to Set this attribute
+ */
+ EKeyboardBacklightState,
+
+
+ /**
+ Power supply to an accessory port.
+
+ It has the values:
+ 0 = turn off power to an accessory port on the device;
+ 1 = turn on power.
+
+ This is dynamic and writeable.
+
+ @capability PowerMgmt needed to Set this attribute
+ */
+ EAccessoryPower,
+
+
+ /**
+ A 2 decimal digit language index.
+
+ It is used as the two digit language number that is the suffix of
+ language resource DLLs, e.g ELOCL.01.
+
+ The locale with this language index is loaded the next time that
+ the device boots.
+
+ This is dynamic and writeable.
+
+ @see TLanguage
+
+ @capability WriteDeviceData needed to Set this attribute
+ */
+ ELanguageIndex,
+
+
+ /**
+ A 2 decimal digit (decimal) language keyboard index.
+ It is used as the two digit language number that is the suffix of
+ language resource DLLs, e.g. EKDATA.01.
+
+ @see TLanguage
+
+ @capability WriteDeviceData needed to Set this attribute
+ */
+ EKeyboardIndex,
+
+
+ /**
+ The maximum allowable size of RAM drive, in bytes.
+ */
+ EMaxRAMDriveSize,
+
+
+ /**
+ Indicates the state of the keyboard.
+
+ It has the values:
+ 0 = keyboard is disabled;
+ 1 = Keyboard is enabled.
+
+ This is dynamic and writeable.
+
+ @capability PowerMgmt needed to Set this attribute
+ */
+ EKeyboardState,
+
+ /**
+ Defines the system drive & custom resource drive.
+ Legacy attribute which is no longer supported.
+
+ @deprecated Attribute is no longer the primary mechanism to define the
+ System Drive or the Custom Resource Drive.
+ @see RFs::GetSystemDrive.
+ @see BaflUtils::NearestLanguageFile
+ @see HALData::ECustomResourceDrive
+ */
+ ESystemDrive,
+
+ /**
+ Indicates the state of the pen or digitiser.
+
+ It has the values:
+ 1 = pen/digitiser is enabled;
+ 0 = pen/digitiser is disabled.
+
+ This is dynamic and writeable.
+
+ @capability PowerMgmt needed to Set this attribute
+ */
+ EPenState,
+
+
+ /**
+ On input: aInOut contains the mode number.
+ On output: aInOut contains: 0 = display is colour;
+ 1 = display is black & white.
+
+ aInOut is the 3rd parameter passed to accessor functions
+ for derived attributes.
+ */
+ EDisplayIsMono,
+
+
+ /**
+ On input: aInOut contains the mode number;
+ On output, aInOut contains: 0 = display is not palettised;
+ 1 = display is palettised.
+
+ aInOut is the 3rd parameter passed to accessor functions
+ for derived attributes.
+ */
+ EDisplayIsPalettized,
+
+
+ /**
+ The display bits per pixel.
+
+ On input, aInOut contains the mode number.
+ On output, aInOut contains the bits per pixel for that mode.
+
+ aInOut is the 3rd parameter passed to accessor functions
+ for derived attributes.
+
+ It is read only data.
+ */
+ EDisplayBitsPerPixel,
+
+
+ /**
+ The number of display modes available.
+ */
+ EDisplayNumModes,
+
+
+ /**
+ The address of the display memory.
+ */
+ EDisplayMemoryAddress,
+
+
+ /**
+ The offset, in bytes, to the pixel area of the screen from the start of screen memory.
+
+ This is used to account for the fact that the palette is sometimes at
+ the beginning of the display memory.
+
+ On input, aInOut contains the mode number.
+ On output, aInOut contains the offset to the first pixel for that mode.
+
+ aInOut is the 3rd parameter passed to accessor functions
+ for derived attributes.
+ */
+ EDisplayOffsetToFirstPixel,
+
+
+ /**
+ The separation, in bytes, of successive lines of display in memory.
+
+ On input, aInOut contains the mode number.
+ On output, aInOut contains the display offset between lines.
+
+ aInOut is the 3rd parameter passed to accessor functions
+ for derived attributes.
+ */
+ EDisplayOffsetBetweenLines,
+
+
+ /**
+ @capability MultimediaDD needed to Set this attribute
+ */
+ EDisplayPaletteEntry,
+
+
+ /**
+ It has the values:
+ 1 = order of pixels in display is RGB;
+ 0 = otherwise.
+ */
+ EDisplayIsPixelOrderRGB,
+
+
+ /**
+ It has the values:
+ 1 = pixel order is landscape;
+ 0 = pixel order is portrait.
+ */
+ EDisplayIsPixelOrderLandscape,
+
+
+ /**
+ This indicates or sets the current display mode where
+ EDisplayNumModes-1 is the maximum value for the display mode.
+ The properties of a particular display mode are entirely defined by
+ the base port software associated with the hardware upon which the OS
+ is running.
+
+ @capability MultimediaDD needed to Set this attribute
+ */
+ EDisplayMode,
+
+
+ /**
+ If the target hardware upon which Symbian OS is running has switches
+ which can be read by the base port software, this interface allows
+ the current status of those switches to be read.
+ */
+ ESwitches,
+
+
+ /**
+ The port number of the debug port.
+ */
+ EDebugPort,
+
+
+ /**
+ The language code of the Locale which was loaded at device boot time.
+
+ This is dynamic and writeable.
+
+ @see ELanguageIndex
+
+ @capability WriteSystemData needed to Set this attribute
+ */
+ ELocaleLoaded,
+
+
+ /**
+ The drive number to use for storage of Clipboard data.
+ 0 = Drive A, 1 = Drive B, etc...
+ */
+ EClipboardDrive,
+
+ /**
+ Custom restart
+ @capability PowerMgmt
+ */
+ ECustomRestart,
+
+ /**
+ Custom restart reason
+ */
+ ECustomRestartReason,
+
+ /**
+ The number of screens.
+ */
+ EDisplayNumberOfScreens,
+
+ /**
+ The time between nanokernel ticks, in microseconds.
+ */
+ ENanoTickPeriod,
+
+ /**
+ The frequency of the fast counter.
+ */
+ EFastCounterFrequency,
+
+ /**
+ Indicates the whether the fast counter counts up or down.
+ */
+ EFastCounterCountsUp,
+
+ /**
+ Indicates whether a 3 dimensional pointing device is available for input and Z coordinate
+ is provided in appropriate pointer-related TRawEvents generated by the driver.
+
+ It has the values:
+ 0 = a 3D pointer is not available for input and Z coordinate is not provided in TRawEvents;
+ 1 = a 3D pointer is present and Z coordinate is provided in TRawEvents.
+ */
+ EPointer3D,
+
+ /**
+ The furthest detectable 3D pointing device's proximity above the screen.
+ As proximity values above the screen are negative, this will be a negative value.
+
+ This is dynamic and writeable.
+ */
+ EPointer3DMaxProximity,
+
+ /**
+ Indicates whether a 3 dimensional pointing device supports Theta polar angle reading.
+
+ It has the values:
+ 0 = a 3D pointer does not support Theta polar angle reading;
+ 1 = a 3D pointer supports Theta polar angle reading.
+ */
+ EPointer3DThetaSupported,
+
+ /**
+ Indicates whether a 3 dimensional pointing device supports Phi polar angle reading.
+
+ It has the values:
+ 0 = a 3D pointer does not support Phi polar angle reading;
+ 1 = a 3D pointer supports Phi polar angle reading.
+ */
+ EPointer3DPhiSupported,
+
+ /**
+ Indicates whether a 3 dimensional pointing device supports rotation angle along its main axis reading.
+
+ It has the values:
+ 0 = a 3D pointer does not support alpha (rotation) reading;
+ 1 = a 3D pointer supports alpha (rotation) reading.
+ */
+ EPointer3DRotationSupported,
+
+ /**
+ Indicates whether a 3 dimensional pointing device supports readings of pressure applied on screen.
+
+ It has the values:
+ 0 = a 3D pointer does not support pressure reading;
+ 1 = a 3D pointer supports pressure reading.
+ */
+ EPointer3DPressureSupported,
+
+ /**
+ Indicates whether hardware floating point is available, and what type.
+
+ If no hardware floating point is available, reading this attribute will return KErrNotSupported.
+ If hardware floating point is available, reading this attribute will return KErrNone and the type
+ available. These types are specified in TFloatingPointType.
+ */
+ EHardwareFloatingPoint,
+
+ /**
+ The offset between secure and nonsecure clocks. If this attribute is undefined no secure clock
+ will be available.
+ */
+ ETimeNonSecureOffset,
+
+ /**
+ Persist startup mode.
+
+ If no variant specific implementation exists, the startup mode will be stored in platform
+ specific values.hda file.
+ */
+ EPersistStartupModeKernel,
+
+ /**
+ Maximum restart reasons.
+
+ Returns the maximum number of values that can be used to store the restart reason required for a custom restart.
+ */
+ EMaximumCustomRestartReasons,
+
+ /**
+ Maximum startup modes.
+
+ Returns the maximum number of values that can be used to store the startup mode requires for a system restart.
+ */
+ EMaximumRestartStartupModes,
+
+ /**
+ Defines the custom resource drive.
+
+ This drive attribute should be set if an additional drive is required for use in the search
+ algorithm for language files.
+
+ @see TDriveNumber
+ @see BaflUtils::NearestLanguageFile for how this attribute is used
+ @capability WriteDeviceData needed to Set this attribute
+ */
+ ECustomResourceDrive,
+
+ /**
+ Step size of Z distance data.
+
+ Returns the minimum size of the step between two resolvable z positions
+ */
+ EPointer3DProximityStep,
+
+ /**
+ Maximum Number of Pointers supported by hardware/driver
+
+ Returns the maximum number of pointers for a multi-touch configuration (or KErrNotSupported or 0 or 1 for single-touch legacy configuration)
+ */
+ EPointerMaxPointers,
+
+ /**
+ Maximum Number of Pointers
+
+ Sets and reads back the number of pointers as requested by the UI (<=EPointerMaxPointers)
+ */
+ EPointerNumberOfPointers,
+
+ /**
+ Maximum Pressure Value
+
+ Returns the maximum pressure value
+ */
+ EPointer3DMaxPressure,
+
+ /**
+ Step size of pressure data.
+
+ Returns the minimum size of the step between two resolvable pressure readings
+ */
+ EPointer3DPressureStep,
+
+ /**
+ The threshold on pointer's Z coordinate above which EEnterHighPressure pointer event is sent to WSERV's clients.
+ This value is intended to be preconfigured in build time and modified by Window Server only
+
+ @prototype 9.5
+ */
+ EPointer3DEnterHighPressureThreshold,
+
+ /**
+ The threshold on pointer's Z coordinate below which EExitHighPressure pointer event is sent to WSERV's clients.
+ This value is intended to be preconfigured in build time and modified by Window Server only
+
+ @prototype 9.5
+ */
+ EPointer3DExitHighPressureThreshold,
+
+ /**
+ The threshold on pointer's Z coordinate above which EEnterCloseProximity pointer event is sent to WSERV's clients.
+ This value is intended to be preconfigured in build time and modified by Window Server only
+
+ @prototype 9.5
+ */
+ EPointer3DEnterCloseProximityThreshold,
+
+
+ /**
+ The threshold on pointer's Z coordinate below which EExitCloseProximity pointer event is sent to WSERV's clients.
+ This value is intended to be preconfigured in build time and modified by Window Server only
+
+ @prototype 9.5
+ */
+ EPointer3DExitCloseProximityThreshold,
+
+ /**
+ A Handle to the display memory.
+ This attribute opens a chunk, the client is responsible for closing it.
+ Using HAL attribtues to open handles is not recommended and this
+ attribute may be removed in the future.
+
+ @prototype 9.5
+ */
+ EDisplayMemoryHandle,
+
+ /**
+ Serial number of this board
+ */
+ ESerialNumber,
+
+
+ /**
+ Interrupt used by sampling profiler - applicable for SMP only. Each CPU_i is interrupted by interrupt number ECpuProfilingInterrupt + i
+ */
+ ECpuProfilingDefaultInterruptBase,
+
+
+ /**
+ Number of processors present on the device. Returns 1 on unicore. This number is constant and does not take account of power management
+ */
+ ENumCpus,
+
+ /**
+ The orientation of the Digitiser. Usually mirrors device orientation.
+
+ @see TDigitiserOrientation for allowed values
+ @capability WriteDeviceData needed to Set this attribute
+ */
+ EDigitiserOrientation,
+
+ /*
+ * NOTE:
+ * When updating this list, please also update hal/rom/hal.hby and hal/tsrc/t_newhal.cpp.
+ */
+
+ /**
+
+ The number of HAL attributes per screen.
+
+ It is simply defined by its position in the enumeration.
+ */
+ ENumHalAttributes
+
+ };
+
+
+
+ /**
+ Defines properties for the hardware attributes.
+
+ @see HALData::TAttribute
+ */
+ enum TAttributeProperty
+ {
+ /**
+ When set, means that an attribute is meaningful on this device.
+
+ @see HAL::Get()
+ @see HAL::Set()
+ */
+ EValid=0x1,
+
+
+ /**
+ When set, means that an attribute is modifiable.
+ A call to HAL::Set() for an attribute that does not have this property,
+ returns KErrNotSupported.
+
+ @see HAL::Get()
+ @see HAL::Set()
+ */
+ ESettable=0x2,
+ };
+
+
+
+ /**
+ UIDs for a defined set of device manufacturers.
+
+ Note that any manufacturer not represented in this list must obtain
+ a value from the Symbian registry.
+
+ @see HALData::TAttribute
+ */
+ enum TManufacturer // UID for manufacturer
+ {
+ EManufacturer_Ericsson=0x00000000,
+ EManufacturer_Motorola=0x00000001,
+ EManufacturer_Nokia=0x00000002,
+ EManufacturer_Panasonic=0x00000003,
+ EManufacturer_Psion=0x00000004,
+ EManufacturer_Intel=0x00000005,
+ EManufacturer_Cogent=0x00000006,
+ EManufacturer_Cirrus=0x00000007,
+ EManufacturer_Linkup=0x00000008,
+ EManufacturer_TexasInstruments=0x00000009,
+ // New manufacturers must obtain an official UID to identify themselves
+ };
+
+
+
+ /**
+ Defines the Symbian OS device families.
+
+ @see HALData::TAttribute
+ */
+ enum TDeviceFamily
+ {
+ EDeviceFamily_Crystal,
+ EDeviceFamily_Pearl,
+ EDeviceFamily_Quartz,
+ };
+
+
+
+ /**
+ Defines the set of CPU architectures.
+
+ @see HALData::TAttribute
+ */
+ enum TCPU
+ {
+ ECPU_ARM,
+ ECPU_MCORE,
+ ECPU_X86,
+ };
+
+
+
+ /**
+ Defines the set of ABIs used by the CPU for user applications.
+
+ @see HALData::TAttribute
+ */
+ enum TCPUABI
+ {
+ ECPUABI_ARM4,
+ ECPUABI_ARMI,
+ ECPUABI_THUMB,
+ ECPUABI_MCORE,
+ ECPUABI_MSVC,
+ ECPUABI_ARM5T,
+ ECPUABI_X86,
+ };
+
+
+
+ /**
+ Defines the set of reasons for a system boot.
+
+ @see HALData::TAttribute
+ */
+ enum TSystemStartupReason
+ {
+ ESystemStartupReason_Cold,
+ ESystemStartupReason_Warm,
+ ESystemStartupReason_Fault,
+ };
+
+
+
+ /**
+ Defines the set of available keyboard types.
+
+ @see HALData::TAttribute
+ */
+ bitmask TKeyboard
+ {
+ EKeyboard_Keypad=0x1,
+ EKeyboard_Full=0x2,
+ };
+
+
+
+ /**
+ Defines the mouse cursor visibility.
+
+ @see HALData::TAttribute
+ */
+ enum TMouseState
+ {
+ EMouseState_Invisible=0,
+ EMouseState_Visible=1,
+ };
+
+
+
+ /**
+ Defines a set of UIDs for specific devices, reference boards etc
+
+ @see HALData::TAttribute
+ */
+ enum TMachineUid
+ {
+ EMachineUid_Series5mx=0x1000118a,
+ EMachineUid_Brutus=0x10005f60,
+ EMachineUid_Cogent=0x10005f61,
+ EMachineUid_Win32Emulator=0x10005f62,
+ EMachineUid_WinC=0x10005f63,
+ EMachineUid_CL7211_Eval=0x1000604f,
+ EMachineUid_LinkUp=0x00000000,
+ EMachineUid_Assabet=0x100093f3,
+ EMachineUid_Zylonite=0x101f7f27,
+ EMachineUid_IQ80310=0x1000a681,
+ EMachineUid_Lubbock=0x101f7f26,
+ EMachineUid_Integrator=0x1000AAEA,
+ EMachineUid_Helen=0x101F3EE3,
+ EMachineUid_X86PC=0x100000ad,
+ EMachineUid_OmapH2=0x1020601C,
+ EMachineUid_OmapH4=0x102734E3,
+ EMachineUid_NE1_TB=0x102864F7,
+ EMachineUid_EmuBoard=0x1200afed,
+ EMachineUid_OmapH6=0x10286564,
+ EMachineUid_OmapZoom=0x10286565,
+ EMachineUid_STE8500=0x101FF810,
+ };
+
+
+
+ /**
+ Defines power levels for the system (or 'Main') battery.
+
+ @see HALData::TAttribute
+ */
+ enum TPowerBatteryStatus
+ {
+ EPowerBatteryStatus_Zero,
+ EPowerBatteryStatus_Replace,
+ EPowerBatteryStatus_Low,
+ EPowerBatteryStatus_Good,
+ };
+
+
+
+ /**
+ Defines power levels for the backup power.
+
+ @see HALData::TAttribute
+ */
+ enum TPowerBackupStatus
+ {
+ EPowerBackupStatus_Zero,
+ EPowerBackupStatus_Replace,
+ EPowerBackupStatus_Low,
+ EPowerBackupStatus_Good,
+ };
+
+
+ /**
+ Describes the orientation of the screen digitiser, usually mirrors the
+ device orientation not necessarily the display rotation as this might be
+ limited to upright and left 90 only. The values in degrees measures
+ the anti-clockwise angle from the left edge of the digitiser from the
+ normal default position of the device.
+
+ User-side clients can use attribute to inform the digitiser driver of the
+ digitiser orientation. The driver may then use this information to adjust
+ X.Y sampling depending on input pointer type.
+
+ @see HALData::TAttribute
+ */
+ enum TDigitiserOrientation
+ {
+ EDigitiserOrientation_default, ///< Driver using build-in default
+ EDigitiserOrientation_000, ///< Device normal 'make-call' position
+ EDigitiserOrientation_090, ///< Device rotated left 90 degrees
+ EDigitiserOrientation_180, ///< Device rotated 180 degrees
+ EDigitiserOrientation_270 ///< Device rotated right 90 degrees
+ };
+
+ };
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxememorymonitor/oommonitorsession.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2010 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: Fake ROomMonitorSession class implementation
+*
+*/
+
+#include "oommonitorsession.h"
+
+TInt ROomMonitorSession::Connect()
+{
+ return KErrNone;
+}
+
+TInt ROomMonitorSession::RequestFreeMemory(TInt aBytesRequested)
+{
+ return KErrNone;
+}
+
+void ROomMonitorSession::RequestFreeMemory(TInt /*aBytesRequested*/, TRequestStatus& /*aStatus*/)
+{
+ // do nothing
+}
+
+TInt ROomMonitorSession::RequestOptionalRam(TInt /*aBytesRequested*/, TInt /*aMinimumBytesNeeded*/, TInt /*aPluginId*/, TInt& /*aBytesAvailable*/)
+{
+ return KErrNone;
+}
+
+void ROomMonitorSession::RequestOptionalRam(TInt /*aBytesRequested*/, TInt /*aMinimumBytesNeeded*/, TInt aPluginId, TRequestStatus& /*aStatus*/)
+{
+ // do nothing
+}
+
+void ROomMonitorSession::CancelRequestFreeMemory()
+{
+ // do nothing
+}
+
+void ROomMonitorSession::ThisAppIsNotExiting(TInt /*aWgId*/)
+{
+ // do nothing
+}
+
+void ROomMonitorSession::SetOomPriority(TOomPriority /*aPriority*/)
+{
+ // do nothing
+}
+
+void ROomMonitorSession::Close()
+{
+ // do nothing
+}
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxememorymonitor/oommonitorsession.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,146 @@
+/*
+* Copyright (c) 2010 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: Fake class for testing
+*
+*/
+
+#ifndef OOMMONITORSESSION_H
+#define OOMMONITORSESSION_H
+
+#include <e32base.h>
+
+const TInt KOomMaxAllocationWithoutPermission = 1048576;
+const TUid KOomMemoryMonitorStatusPropertyCategory = {0x10207218};
+const TUint32 KOomMemoryMonitorStatusPropertyKey = 0;
+enum TMemoryMonitorStatusPropertyValues
+ {
+ // Above Treshhold: Free Ram is above good treshhold point and memory monitor isn't freeing any memory
+ EAboveTreshHold,
+
+ // Freeing Memory: Memory monitor is in the middle of freeing memory
+ EFreeingMemory,
+
+ // Below Treshhold: Memory monitor has tried to free some RAM but total memory is still below treshhold and memory monitor has given up freeing more memory.
+ EBelowTreshHold
+ };
+class ROomMonitorSession
+ {
+public:
+
+ /** Defines the application priorities of OOM monitor. */
+ enum TOomPriority
+ {
+ /**
+ * Application can be closed if needed.
+ */
+ EOomPriorityNormal = 0,
+
+ /**
+ * Application should not be closed if possible.
+ */
+ EOomPriorityHigh,
+
+ /**
+ * Application is busy and should not be closed.
+ */
+ EOomPriorityBusy
+ };
+
+public:
+ /**
+ * Connects a new session.
+ * Sessions must be connected before any other APIs can be used.
+ * When the client has finished using a session, Close() must be called.
+ * @return KErrNone if successful, error code otherwise.
+ */
+ TInt Connect();
+
+ /**
+ * Request that the OOM monitor attempts to free some paged memory.
+ * This function may take several seconds to execute, depending on
+ * the memory state. It will not return until the attempt to recover
+ * memory has completed.
+ * @param aBytesRequested The number of bytes of free memory that the client requests.
+ * @return KErrNone if the request memory is free. KErrNoMemory if that
+ * amount of memory could not be recovered. Other error codes may
+ * also be returned.
+ */
+ TInt RequestFreeMemory(TInt aBytesRequested);
+
+ /**
+ * Request that the OOM monitor attempts to free some paged memory.
+ * This is an asynchronous version of the request for free paged memory.
+ * @param aBytesRequested The number of bytes of free memory that the client requests.
+ * @param aStatus will be completed when the attempt to recover memory
+ * has finished. This may take several seconds, depending on
+ * the memory state. On completion, aStatus will be set to
+ * KErrNone if the request memory is free. KErrNoMemory if that
+ * amount of memory could not be recovered. Other error codes may
+ * also be set.
+ */
+ void RequestFreeMemory(TInt aBytesRequested, TRequestStatus& aStatus);
+
+ /**
+ * Request that the OOM monitor attempts to free some memory for an optional allocation.
+ * The passed in plugin ID is used to determine the priority for this allocation.
+ * Lower priority OOM actions may be executed to free enough RAM for this allocation.
+ * This function may take several seconds to execute, depending on
+ * the memory state. It will not return until the attempt to recover
+ * memory has completed.
+ * @param aBytesRequested The number of bytes of free memory that the client requests.
+ * @param aPluginId The ID of the plugin that may delete the allocation in event of low memory.
+ * @return KErrNone if the request memory is free. KErrNoMemory if that
+ * amount of memory could not be recovered. Other error codes may
+ * also be returned.
+ */
+ TInt RequestOptionalRam(TInt aBytesRequested, TInt aMinimumBytesNeeded, TInt aPluginId, TInt& aBytesAvailable);
+
+ /**
+ * Request that the OOM monitor attempts to free some memory for an optional allocation.
+ * The passed in plugin ID is used to determine the priority for this allocation.
+ * Lower priority OOM actions may be executed to free enough RAM for this allocation.
+ * This function may take several seconds to execute, depending on
+ * the memory state. It will not return until the attempt to recover
+ * memory has completed.
+ * @param aBytesRequested The number of bytes of free memory that the client requests.
+ * @param aPluginId The ID of the plugin that may delete the allocation in event of low memory.
+ * @param aStatus The TRequestStatus (completes with the number of bytes freed (aStatus >= 0) or an error (aStatus <= 0))
+ * @return None
+ */
+ void RequestOptionalRam(TInt aBytesRequested, TInt aMinimumBytesNeeded, TInt aPluginId, TRequestStatus& aStatus);
+
+ /**
+ * Cancels the asynchronous request for free memory.
+ */
+ void CancelRequestFreeMemory();
+
+ /**
+ * Notify the OOM monitor that this application is not responding
+ * to the EEikCmdExit request to exit the application.
+ * This function is used by the Avkon framework's app shutter.
+ * @param aWgId the window group identifier of the app that is not exiting.
+ */
+ void ThisAppIsNotExiting(TInt aWgId);
+
+ /**
+ * Notify the OOM monitor that this application has the specified priority
+ * @param aPriority the priority of the application
+ */
+ void SetOomPriority(TOomPriority aPriority);
+
+ void Close();
+
+ };
+
+#endif // OOMMONITORSESSION_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxememorymonitor/unittest_cxememorymonitor.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2010 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 <QDate>
+#include <QTest>
+#include <QDebug>
+#include <QThread>
+
+#include "cxetestutils.h"
+#include "cxefakefeaturemanager.h"
+#include "cxememorymonitor.h"
+#include "unittest_cxememorymonitor.h"
+
+UnitTestCxeMemoryMonitor::UnitTestCxeMemoryMonitor()
+ : mMemoryMonitor(NULL),
+ mFakeFeatureManager(NULL)
+{
+}
+
+UnitTestCxeMemoryMonitor::~UnitTestCxeMemoryMonitor()
+{
+ cleanup();
+}
+
+// Run before each individual test case
+void UnitTestCxeMemoryMonitor::init()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ mFakeFeatureManager = new CxeFakeFeatureManager();
+ mMemoryMonitor = new CxeMemoryMonitor(*mFakeFeatureManager);
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+// Run after each individual test case
+void UnitTestCxeMemoryMonitor::cleanup()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ delete mMemoryMonitor;
+ mMemoryMonitor = NULL;
+
+ delete mFakeFeatureManager;
+ mFakeFeatureManager = NULL;
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeMemoryMonitor::testFree()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ QVERIFY(mMemoryMonitor->free() > 0);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeMemoryMonitor::testStartMonitoring()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mMemoryMonitor->startMonitoring();
+ QVERIFY(mMemoryMonitor->free() > 0);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeMemoryMonitor::testStopMonitoring()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mMemoryMonitor->stopMonitoring();
+ QVERIFY(mMemoryMonitor->free() > 0);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeMemoryMonitor::testStartStopMonitoring()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mMemoryMonitor->startMonitoring();
+ mMemoryMonitor->stopMonitoring();
+ QVERIFY(mMemoryMonitor->free() > 0);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+// main() function - Need event loop for waiting signals,
+// so can't use QTEST_APPLESS_MAIN.
+QTEST_MAIN(UnitTestCxeMemoryMonitor);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxememorymonitor/unittest_cxememorymonitor.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+#ifndef UNITTEST_CXEMEMORYMONITOR_H
+#define UNITTEST_CXEMEMORYMONITOR_H
+
+#include <QObject>
+
+#include "cxenamespace.h"
+
+class CxeMemoryMonitor;
+class CxeFakeFeatureManager;
+
+class UnitTestCxeMemoryMonitor : public QObject
+{
+ Q_OBJECT
+
+public:
+ UnitTestCxeMemoryMonitor();
+ ~UnitTestCxeMemoryMonitor();
+
+private slots:
+ void init();
+ void cleanup();
+
+ void testFree();
+ void testStartMonitoring();
+ void testStopMonitoring();
+ void testStartStopMonitoring();
+
+private:
+ CxeFakeFeatureManager *mFakeFeatureManager;
+ CxeMemoryMonitor *mMemoryMonitor;
+};
+
+#endif // UNITTEST_CXEMEMORYMONITOR_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxememorymonitor/unittest_cxememorymonitor.pro Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,32 @@
+# Copyright (c) 2010 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(../unittest.pri)
+TARGET = unittest_cxememorymonitor
+
+DEPENDPATH = . ../../fakeclasses ../../../src/dummyengine ../utils
+INCLUDEPATH = . ../../fakeclasses ../../../src/dummyengine ../utils ../../../traces
+
+DEFINES *= CXE_USE_DUMMY_CAMERA
+
+SOURCES *= unittest_cxememorymonitor.cpp \
+ cxefakefeaturemanager.cpp \
+ ../../../src/cxememorymonitor.cpp \
+ ../../../src/cxememorymonitorprivate.cpp \
+ ./oommonitorsession.cpp \
+ ./hal.cpp
+
+HEADERS *= unittest_cxememorymonitor.h \
+ cxefakefeaturemanager.h \
+ ../../../inc/api/cxememorymonitor.h \
+ ../../../inc/cxememorymonitorprivate.h \
+ ./oommonitorsession.h \
+ ./hal.h \
+ ./hal_data.h
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxequalitypresetssymbian/unittest_cxequalitypresetssymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxequalitypresetssymbian/unittest_cxequalitypresetssymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -95,6 +95,40 @@
CX_DEBUG_EXIT_FUNCTION();
}
+
+void UnitTestCxeQualityPresetsSymbian::testRecordingTimeAvailable()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ int time(0);
+
+ CxeVideoDetails details;
+ details.mAudioBitRate = 100;
+ details.mVideoBitRate = 100;
+
+ // Check zero time when disk full.
+ time = mQualityPresets->recordingTimeAvailable(details, qint64(0));
+ QVERIFY(time == 0);
+
+ // Common time limit is 90 minutes
+ time = mQualityPresets->recordingTimeAvailable(details, qint64(1000*1000*1000));
+ QVERIFY(time == 5400);
+
+ // Normal case, no quality specific limit
+ time = mQualityPresets->recordingTimeAvailable(details, qint64(1000*1000));
+ QVERIFY(time > 0);
+ QVERIFY(time < 5400);
+
+ // Normal case, quality specifies limit
+ details.mMaximumSizeInBytes = 10*1000;
+ time = mQualityPresets->recordingTimeAvailable(details, qint64(1000*1000));
+ QVERIFY(time > 0);
+ QVERIFY(time < 5400);
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
// main() function non-GUI testing
QTEST_MAIN(UnitTestCxeQualityPresetsSymbian);
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxequalitypresetssymbian/unittest_cxequalitypresetssymbian.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxequalitypresetssymbian/unittest_cxequalitypresetssymbian.h Thu Jul 15 01:55:05 2010 +0300
@@ -39,6 +39,7 @@
void testImageQualityPresets();
void testVideoQualityPresets();
+ void testRecordingTimeAvailable();
private:
//data members
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesettingscenrepstore/unittest_cxesettingscenrepstore.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesettingscenrepstore/unittest_cxesettingscenrepstore.pro Thu Jul 15 01:55:05 2010 +0300
@@ -10,18 +10,25 @@
# Description:
+CONFIG *= cxeunit_no_system_paths
+
include(../unittest.pri)
TARGET = unittest_cxesettingscenrepstore
-LIBS *= -lxqsettingsmanager
+INCLUDEPATH *= ../system_include
+DEPENDPATH *= ../system_include
SOURCES *= unittest_cxesettingscenrepstore.cpp \
- cxesettingscenrepstore.cpp
+ cxesettingscenrepstore.cpp \
+ xqsettingsmanager.cpp \
+ xqsettingskey.cpp
HEADERS *= unittest_cxesettingscenrepstore.h \
cxutils.h \
cxeerror.h \
+ xqsettingskey.h \
+ xqsettingsmanager.h \
cxenamespace.h \
cxecenrepkeys.h \
cxesettingscenrepstore.h \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesettingscenrepstore/xqsettingskey.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+/*!
+* XQSettingsKey class fake implementation
+*/
+
+#include <QVariant>
+#include <QList>
+#include <QMetaType>
+#include <QObject>
+
+#include "cxutils.h"
+#include "xqsettingskey.h"
+#include "cxenamespace.h"
+
+
+
+
+/*!
+* Reads the setting value for the given key from cenrep
+*/
+long int XQSettingsKey::uid() const
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ CX_DEBUG_EXIT_FUNCTION();
+ return mUid;
+}
+
+
+/*!
+* Reads the setting value for the given key from cenrep
+*/
+unsigned long int XQSettingsKey::key() const
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ CX_DEBUG_EXIT_FUNCTION();
+ return mKey;
+}
+
+
+
+/*!
+* Reads the setting value for the given key from cenrep
+*/
+XQSettingsKey::Target XQSettingsKey::target() const
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ CX_DEBUG_EXIT_FUNCTION();
+ return mTarget;
+}
+
+
+
+/*!
+* XQSettingsKey::XQSettingsKey
+*/
+XQSettingsKey::XQSettingsKey(XQSettingsKey::Target target, long int uid, unsigned long int key)
+:mTarget(target),
+ mUid(uid),
+ mKey(key)
+{
+}
+
+
+
+/*!
+* XQSettingsKey::close
+*/
+XQSettingsKey::~XQSettingsKey()
+{
+}
+
+// end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesettingscenrepstore/xqsettingskey.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+#ifndef XQSETTINGSKEY_H
+#define XQSETTINGSKEY_H
+
+// INCLUDES
+
+
+// CLASS DECLARATION
+class XQSettingsKey
+{
+public:
+ enum Target
+ {
+ TargetCentralRepository = 0,
+ TargetPublishAndSubscribe
+ };
+
+ XQSettingsKey(XQSettingsKey::Target target, long int uid, unsigned long int key);
+ ~XQSettingsKey();
+
+ XQSettingsKey::Target target() const;
+ long int uid() const;
+ unsigned long int key() const;
+
+protected:
+ XQSettingsKey::Target mTarget;
+ long int mUid;
+ unsigned long int mKey;
+};
+
+#endif //XQSETTINGSKEY_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesettingscenrepstore/xqsettingsmanager.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+/*!
+* XQSettingsManager class fake implementation
+*/
+
+#include <QVariant>
+#include <QList>
+#include <QMetaType>
+#include <QObject>
+
+#include "xqsettingsmanager.h"
+#include "xqsettingskey.h"
+#include "cxenamespace.h"
+#include "cxutils.h"
+
+
+
+
+/*!
+* write value to cenrep key
+*/
+bool XQSettingsManager::writeItemValue(const XQSettingsKey& key, const QVariant& value)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ mError = XQSettingsManager::NoError;
+ mStore[key.key()] = value;
+
+ CX_DEBUG_EXIT_FUNCTION();
+ return true;
+}
+
+
+
+/*!
+* Reads the setting value for the given key from cenrep
+*/
+QVariant XQSettingsManager::readItemValue(const XQSettingsKey& settkey, XQSettingsManager::Type /*type*/)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mError = XQSettingsManager::NoError;
+ if(mStore.contains(settkey.key())) {
+ return mStore[settkey.key()];
+ }
+ return QVariant(1);
+}
+
+
+XQSettingsManager::Error XQSettingsManager::error() const
+{
+ return mError;
+}
+
+
+/*!
+* XQSettingsManager::XQSettingsManager
+*/
+XQSettingsManager::XQSettingsManager(QObject* /*parent*/)
+{
+}
+
+
+
+/*!
+* XQSettingsManager::close
+*/
+XQSettingsManager::~XQSettingsManager()
+{
+}
+
+
+/*! Instead of monitoring value changes for a P&S key
+* this fake class implementation emits valueChanged signal for the given key
+*/
+bool XQSettingsManager::startMonitoring(const XQSettingsKey& key, XQSettingsManager::Type type)
+{
+ emit valueChanged(key, type);
+ return true;
+}
+
+// end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesettingscenrepstore/xqsettingsmanager.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+#ifndef XQSETTINGSMANAGER_H
+#define XQSETTINGSMANAGER_H
+
+// INCLUDES
+#include <QObject>
+#include <QVariant>
+#include "xqsettingskey.h"
+
+
+
+
+// CLASS DECLARATION
+class XQSettingsManager : public QObject
+{
+ Q_OBJECT
+
+public:
+
+ enum Type
+ {
+ TypeVariant = 0,
+ TypeInt,
+ TypeDouble,
+ TypeString,
+ TypeByteArray
+ };
+
+ enum Error
+ {
+ NoError = 0,
+ OutOfMemoryError,
+ NotFoundError,
+ AlreadyExistsError,
+ PermissionDeniedError,
+ BadTypeError,
+ NotSupportedError,
+ UnknownError = -1
+ };
+
+ XQSettingsManager(QObject* parent = 0);
+ ~XQSettingsManager();
+
+ QVariant readItemValue(const XQSettingsKey& key, XQSettingsManager::Type type = XQSettingsManager::TypeVariant);
+ bool writeItemValue(const XQSettingsKey& key, const QVariant& value);
+ XQSettingsManager::Error error() const;
+ bool startMonitoring(const XQSettingsKey& key, XQSettingsManager::Type type = XQSettingsManager::TypeVariant);
+
+
+signals:
+ void valueChanged(const XQSettingsKey& key, const QVariant& value);
+
+private:
+ XQSettingsManager::Error mError;
+ QHash<unsigned long int, QVariant> mStore;
+
+};
+
+#endif // XQSETTINGSMANAGER_H
+
+// End of file
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesettingscontrolsymbian/unittest_cxesettingscontrolsymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesettingscontrolsymbian/unittest_cxesettingscontrolsymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -96,7 +96,7 @@
CxeScene videoScene;
- videoScene.insert(CxeSettingIds::SCENE_ID, CxeSettingIds::VIDEO_SCENE_AUTO);
+ videoScene.insert(CxeSettingIds::SCENE_ID, Cxe::VIDEO_SCENE_AUTO);
videoScene.insert(CxeSettingIds::FOCAL_RANGE, CxeAutoFocusControl::Hyperfocal);
videoScene.insert(CxeSettingIds::WHITE_BALANCE, WhitebalanceAutomatic);
videoScene.insert(CxeSettingIds::EXPOSURE_MODE, ExposureAuto);
@@ -109,7 +109,7 @@
CxeScene imageScene;
- imageScene.insert(CxeSettingIds::SCENE_ID, CxeSettingIds::IMAGE_SCENE_NIGHT);
+ imageScene.insert(CxeSettingIds::SCENE_ID, Cxe::IMAGE_SCENE_NIGHT);
imageScene.insert(CxeSettingIds::FOCAL_RANGE, CxeAutoFocusControl::Auto);
imageScene.insert(CxeSettingIds::WHITE_BALANCE, WhitebalanceAutomatic);
imageScene.insert(CxeSettingIds::EXPOSURE_MODE, ExposureNight);
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesettingsimp/unittest_cxesettingsimp.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesettingsimp/unittest_cxesettingsimp.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2009-2010 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"
@@ -41,7 +41,6 @@
void UnitTestCxeSettingsImp::init()
{
mSettingsModel = new CxeFakeSettingsModel;
- mSettingsModel->initDefaultCameraSettings();
mSettingsImp = new CxeSettingsImp(*mSettingsModel);
}
@@ -164,43 +163,8 @@
err = mSettingsImp->get(CxeSettingIds::IMAGE_SCENE, stringValue);
QCOMPARE(err, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::IMAGE_SCENE, testValue);
- QCOMPARE(stringValue, QString(testValue.toString()));
-
- err = mSettingsImp->get(CxeSettingIds::IMAGE_SCENE_AUTO, stringValue);
- QCOMPARE(err, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::IMAGE_SCENE_AUTO, testValue);
- QCOMPARE(stringValue, QString(testValue.toString()));
-
- err = mSettingsImp->get(CxeSettingIds::IMAGE_SCENE_MACRO, stringValue);
- QCOMPARE(err, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::IMAGE_SCENE_MACRO, testValue);
- QCOMPARE(stringValue, QString(testValue.toString()));
-
- err = mSettingsImp->get(CxeSettingIds::IMAGE_SCENE_NIGHT, stringValue);
- QCOMPARE(err, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::IMAGE_SCENE_NIGHT, testValue);
- QCOMPARE(stringValue, QString(testValue.toString()));
-
- err = mSettingsImp->get(CxeSettingIds::IMAGE_SCENE_PORTRAIT, stringValue);
- QCOMPARE(err, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::IMAGE_SCENE_PORTRAIT, testValue);
- QCOMPARE(stringValue, QString(testValue.toString()));
-
- err = mSettingsImp->get(CxeSettingIds::IMAGE_SCENE_SCENERY, stringValue);
- QCOMPARE(err, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::IMAGE_SCENE_SCENERY, testValue);
- QCOMPARE(stringValue, QString(testValue.toString()));
-
- err = mSettingsImp->get(CxeSettingIds::IMAGE_SCENE_NIGHTPORTRAIT, stringValue);
- QCOMPARE(err, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::IMAGE_SCENE_NIGHTPORTRAIT, testValue);
- QCOMPARE(stringValue, QString(testValue.toString()));
-
- err = mSettingsImp->get(CxeSettingIds::IMAGE_SCENE_SPORTS, stringValue);
- QCOMPARE(err, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::IMAGE_SCENE_SPORTS, testValue);
- QCOMPARE(stringValue, QString(testValue.toString()));
+ CxeScene scene = mSettingsModel->currentImageScene();
+ QCOMPARE(stringValue, scene[CxeSettingIds::SCENE_ID].toString());
err = mSettingsImp->get(CxeSettingIds::LIGHT_SENSITIVITY, stringValue);
QCOMPARE(err, CxeError::None);
@@ -229,28 +193,8 @@
err = mSettingsImp->get(CxeSettingIds::VIDEO_SCENE, stringValue);
QCOMPARE(err, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::VIDEO_SCENE, testValue);
- QCOMPARE(stringValue, QString(testValue.toString()));
-
- err = mSettingsImp->get(CxeSettingIds::VIDEO_SCENE_AUTO, stringValue);
- QCOMPARE(err, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::VIDEO_SCENE_AUTO, testValue);
- QCOMPARE(stringValue, QString(testValue.toString()));
-
- err = mSettingsImp->get(CxeSettingIds::VIDEO_SCENE_LOWLIGHT, stringValue);
- QCOMPARE(err, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::VIDEO_SCENE_LOWLIGHT, testValue);
- QCOMPARE(stringValue, QString(testValue.toString()));
-
- err = mSettingsImp->get(CxeSettingIds::VIDEO_SCENE_NIGHT, stringValue);
- QCOMPARE(err, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::VIDEO_SCENE_NIGHT, testValue);
- QCOMPARE(stringValue, QString(testValue.toString()));
-
- err = mSettingsImp->get(CxeSettingIds::VIDEO_SCENE_NIGHTPORTRAIT, stringValue);
- QCOMPARE(err, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::VIDEO_SCENE_NIGHTPORTRAIT, testValue);
- QCOMPARE(stringValue, QString(testValue.toString()));
+ scene = mSettingsModel->currentVideoScene();
+ QCOMPARE(stringValue, scene[CxeSettingIds::SCENE_ID].toString());
err = mSettingsImp->get(CxeSettingIds::WHITE_BALANCE, stringValue);
QCOMPARE(err, CxeError::None);
@@ -392,7 +336,7 @@
mSettingsModel->getSettingValue(CxeSettingIds::FNAME_IMAGE_COUNTER, checkValue);
QCOMPARE(int(checkValue.toInt()), range);
- error = mSettingsImp->set(CxeSettingIds::FNAME_MONTH_FOLDER, string);
+ error = mSettingsImp->set(CxeSettingIds::FNAME_MONTH_FOLDER, range);
QCOMPARE(error, CxeError::None);
mSettingsModel->getSettingValue(CxeSettingIds::FNAME_MONTH_FOLDER, checkValue);
QCOMPARE(int(checkValue.toInt()), range);
@@ -417,41 +361,6 @@
mSettingsModel->getSettingValue(CxeSettingIds::IMAGE_SCENE, checkValue);
QCOMPARE(int(checkValue.toInt()), range);
- error = mSettingsImp->set(CxeSettingIds::IMAGE_SCENE_AUTO, range);
- QCOMPARE(error, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::IMAGE_SCENE_AUTO, checkValue);
- QCOMPARE(int(checkValue.toInt()), range);
-
- error = mSettingsImp->set(CxeSettingIds::IMAGE_SCENE_MACRO, range);
- QCOMPARE(error, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::IMAGE_SCENE_MACRO, checkValue);
- QCOMPARE(int(checkValue.toInt()), range);
-
- error = mSettingsImp->set(CxeSettingIds::IMAGE_SCENE_NIGHT, range);
- QCOMPARE(error, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::IMAGE_SCENE_NIGHT, checkValue);
- QCOMPARE(int(checkValue.toInt()), range);
-
- error = mSettingsImp->set(CxeSettingIds::IMAGE_SCENE_NIGHTPORTRAIT, range);
- QCOMPARE(error, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::IMAGE_SCENE_NIGHTPORTRAIT, checkValue);
- QCOMPARE(int(checkValue.toInt()), range);
-
- error = mSettingsImp->set(CxeSettingIds::IMAGE_SCENE_PORTRAIT, range);
- QCOMPARE(error, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::IMAGE_SCENE_PORTRAIT, checkValue);
- QCOMPARE(int(checkValue.toInt()), range);
-
- error = mSettingsImp->set(CxeSettingIds::IMAGE_SCENE_SCENERY, range);
- QCOMPARE(error, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::IMAGE_SCENE_SCENERY, checkValue);
- QCOMPARE(int(checkValue.toInt()), range);
-
- error = mSettingsImp->set(CxeSettingIds::IMAGE_SCENE_SPORTS, range);
- QCOMPARE(error, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::IMAGE_SCENE_SPORTS, checkValue);
- QCOMPARE(int(checkValue.toInt()), range);
-
error = mSettingsImp->set(CxeSettingIds::LIGHT_SENSITIVITY, Cxe::LightSensitivityAutomatic);
QCOMPARE(error, CxeError::None);
mSettingsModel->getSettingValue(CxeSettingIds::LIGHT_SENSITIVITY, checkValue);
@@ -507,26 +416,6 @@
mSettingsModel->getSettingValue(CxeSettingIds::VIDEO_SCENE, checkValue);
QCOMPARE(int(checkValue.toInt()), range);
- error = mSettingsImp->set(CxeSettingIds::VIDEO_SCENE_AUTO, range);
- QCOMPARE(error, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::VIDEO_SCENE_AUTO, checkValue);
- QCOMPARE(int(checkValue.toInt()), range);
-
- error = mSettingsImp->set(CxeSettingIds::VIDEO_SCENE_LOWLIGHT, range);
- QCOMPARE(error, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::VIDEO_SCENE_LOWLIGHT, checkValue);
- QCOMPARE(int(checkValue.toInt()), range);
-
- error = mSettingsImp->set(CxeSettingIds::VIDEO_SCENE_NIGHT, range);
- QCOMPARE(error, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::VIDEO_SCENE_NIGHT, checkValue);
- QCOMPARE(int(checkValue.toInt()), range);
-
- error = mSettingsImp->set(CxeSettingIds::VIDEO_SCENE_NIGHTPORTRAIT, range);
- QCOMPARE(error, CxeError::None);
- mSettingsModel->getSettingValue(CxeSettingIds::VIDEO_SCENE_NIGHTPORTRAIT, checkValue);
- QCOMPARE(int(checkValue.toInt()), range);
-
error = mSettingsImp->set(CxeSettingIds::WHITE_BALANCE, Cxe::WhitebalanceAutomatic);
QCOMPARE(error, CxeError::None);
mSettingsModel->getSettingValue(CxeSettingIds::WHITE_BALANCE, checkValue);
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesettingsmodelimp/unittest_cxesettingsmodelimp.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesettingsmodelimp/unittest_cxesettingsmodelimp.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2009-2010 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"
@@ -146,7 +146,7 @@
QCOMPARE(result.toInt(), 0);
// case 1: setting a value to a valid key
- error = mSettingsModel->set(CxeSettingIds::SHARPNESS, 100);
+ error = mSettingsModel->set(CxeSettingIds::SHARPNESS, QVariant(100));
QVERIFY(error == CxeError::None);
// case 2: testing if the value set is right to sharpness key
@@ -233,20 +233,23 @@
{
CxeScene result;
CxeError::Id error;
+
+ // do initialization
+ mSettingsModel->cameraModeChanged(Cxe::ImageMode);
+
// case 1: check the default image scene sharpness value
result = mSettingsModel->currentImageScene();
- QVERIFY(result[CxeSettingIds::SCENE_ID] == CxeSettingIds::IMAGE_SCENE_AUTO);
+ QVERIFY(result[CxeSettingIds::SCENE_ID] == Cxe::IMAGE_SCENE_AUTO);
QVERIFY(result[CxeSettingIds::SHARPNESS] == Cxe::SharpnessNormal);
- QString key = CxeSettingIds::IMAGE_SCENE_PORTRAIT;
-
// case 2: trying to set a new image scene
- error = mSettingsModel->setImageScene(key);
+ QString sceneId = Cxe::IMAGE_SCENE_PORTRAIT;
+ error = mSettingsModel->setImageScene(sceneId);
QVERIFY(error == CxeError::None);
// case 3: testing if NIGHT image scene is set correctly. checking its sharpness value
result = mSettingsModel->currentImageScene();
- QVERIFY(result[CxeSettingIds::SCENE_ID] == key);
+ QVERIFY(result[CxeSettingIds::SCENE_ID] == sceneId);
QVERIFY(result[CxeSettingIds::SHARPNESS] == Cxe::SharpnessSoft);
// case 3: trying to set a image scene with invalid value
@@ -268,20 +271,23 @@
{
CxeScene result;
CxeError::Id error;
+
+ // do initialization
+ mSettingsModel->cameraModeChanged(Cxe::VideoMode);
+
// case 1: check the default image scene
result = mSettingsModel->currentVideoScene();
- QVERIFY(result[CxeSettingIds::SCENE_ID] == CxeSettingIds::VIDEO_SCENE_AUTO);
+ QVERIFY(result[CxeSettingIds::SCENE_ID] == Cxe::VIDEO_SCENE_AUTO);
QVERIFY(result[CxeSettingIds::FRAME_RATE] == 0);
- QString key = CxeSettingIds::VIDEO_SCENE_LOWLIGHT;
-
// case 2: trying to set a new image scene
- error = mSettingsModel->setVideoScene(key);
+ QString sceneId = Cxe::VIDEO_SCENE_LOWLIGHT;
+ error = mSettingsModel->setVideoScene(sceneId);
QVERIFY(error == CxeError::None);
// case 3: testing if NIGHT image scene is set correctly
result = mSettingsModel->currentVideoScene();
- QVERIFY(result[CxeSettingIds::SCENE_ID] == key);
+ QVERIFY(result[CxeSettingIds::SCENE_ID] == sceneId);
QVERIFY(result[CxeSettingIds::FRAME_RATE] == 15);
// case 3: trying to set a image scene with invalid value
@@ -296,5 +302,4 @@
// main() function non-GUI testing
-QTEST_APPLESS_MAIN(UnitTestCxeSettingsModelImp)
-;
+QTEST_APPLESS_MAIN(UnitTestCxeSettingsModelImp);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesnapshotcontrol/unittest_cxesnapshotcontrol.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,156 @@
+/*
+ * 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 <QObject>
+#include <QTest>
+#include <QSignalSpy>
+#include <ecam/camerasnapshot.h>
+
+#include "cxefakecameradevice.h"
+#include "cxefakecameradevicecontrol.h"
+#include "cxeerror.h"
+#include "cxetestutils.h"
+#include "cxesnapshotcontrol.h"
+#include "cxesnapshotcontrolprivate.h"
+#include "unittest_cxesnapshotcontrol.h"
+
+
+UnitTestCxeSnapshotControl::UnitTestCxeSnapshotControl()
+ : mSnapshotControl(NULL),
+ mCameraDevice(NULL),
+ mCameraDeviceControl(NULL)
+{
+}
+
+UnitTestCxeSnapshotControl::~UnitTestCxeSnapshotControl()
+{
+ cleanup();
+}
+
+
+void UnitTestCxeSnapshotControl::init()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ mCameraDeviceControl = new CxeFakeCameraDeviceControl;
+ mCameraDevice = new CxeFakeCameraDevice;
+ mCameraDevice->newCamera(Cxe::PrimaryCameraIndex, mCameraDeviceControl);
+ mCameraDeviceControl->setState(CxeCameraDeviceControl::Ready);
+
+ mSnapshotControl = new CxeSnapshotControl(*mCameraDevice);
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeSnapshotControl::cleanup()
+{
+ delete mSnapshotControl;
+ mSnapshotControl = NULL;
+
+ delete mCameraDevice;
+ mCameraDevice = NULL;
+
+ delete mCameraDeviceControl;
+ mCameraDeviceControl = NULL;
+}
+
+void UnitTestCxeSnapshotControl::testState()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ QVERIFY(mSnapshotControl->state() == CxeSnapshotControl::Idle);
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeSnapshotControl::testCalculateSnapshotSize()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ QSize snapshotSize;
+ QSize displaySize;
+
+ // 16:9 display, 4:3 capture format
+ displaySize = QSize(1600, 900);
+ snapshotSize = mSnapshotControl->calculateSnapshotSize(displaySize, Cxe::AspectRatio4to3);
+ QVERIFY(snapshotSize == QSize(1200, 900));
+
+ // 16:9 display, 16:9 capture format
+ displaySize = QSize(640, 360);
+ snapshotSize = mSnapshotControl->calculateSnapshotSize(displaySize, Cxe::AspectRatio16to9);
+ QVERIFY(snapshotSize == QSize(640, 360));
+
+
+ // 4:3 display, 16:9 capture format
+ displaySize = QSize(640, 480);
+ snapshotSize = mSnapshotControl->calculateSnapshotSize(displaySize, Cxe::AspectRatio16to9);
+ QVERIFY(snapshotSize == QSize(640, 360));
+
+ // 4:3 display, 4:3 capture format
+ displaySize = QSize(640, 480);
+ snapshotSize = mSnapshotControl->calculateSnapshotSize(displaySize, Cxe::AspectRatio4to3);
+ QVERIFY(snapshotSize == QSize(640, 480));
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeSnapshotControl::testStart()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ QVERIFY(mSnapshotControl->state() == CxeSnapshotControl::Idle);
+ mSnapshotControl->start(QSize(640,360));
+ QVERIFY(mSnapshotControl->state() == CxeSnapshotControl::Active);
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeSnapshotControl::testStop()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ QVERIFY(mSnapshotControl->state() == CxeSnapshotControl::Idle);
+ mSnapshotControl->stop();
+ QVERIFY(mSnapshotControl->state() == CxeSnapshotControl::Idle);
+ mSnapshotControl->start(QSize(640,360));
+ QVERIFY(mSnapshotControl->state() == CxeSnapshotControl::Active);
+ mSnapshotControl->stop();
+ QVERIFY(mSnapshotControl->state() == CxeSnapshotControl::Idle);
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void UnitTestCxeSnapshotControl::testHandleCameraEvent()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ QSignalSpy spySnapshotReady(mSnapshotControl, SIGNAL(snapshotReady(CxeError::Id, const QImage&)));
+
+ // Snapshot not started, camera events should not effect in any way.
+ mSnapshotControl->handleCameraEvent(KUidECamEventSnapshotUidValue, KErrNone);
+ QVERIFY(!CxeTestUtils::waitForSignal(spySnapshotReady, 1000));
+
+ // After starting we are supposed to get the snapshotReady signal.
+ mSnapshotControl->start(QSize(640,360));
+ mSnapshotControl->handleCameraEvent(KUidECamEventSnapshotUidValue, KErrNone);
+ QVERIFY(CxeTestUtils::waitForSignal(spySnapshotReady, 1000));
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+QTEST_MAIN(UnitTestCxeSnapshotControl);
+
+// end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesnapshotcontrol/unittest_cxesnapshotcontrol.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,53 @@
+/*
+* 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:
+*
+*/
+#ifndef UNITTEST_CXESNAPSHOTCONTROL_H
+#define UNITTEST_CXESNAPSHOTCONTROL_H
+
+#include <QObject>
+
+class CxeSnapshotControl;
+class CxeFakeCameraDevice;
+class CxeFakeCameraDeviceControl;
+
+class UnitTestCxeSnapshotControl : public QObject
+{
+ Q_OBJECT
+
+public:
+
+ UnitTestCxeSnapshotControl();
+ virtual ~UnitTestCxeSnapshotControl();
+
+private slots:
+
+ void init();
+ void cleanup();
+
+ void testState();
+ void testCalculateSnapshotSize();
+ void testStart();
+ void testStop();
+ void testHandleCameraEvent();
+
+private:
+
+ CxeSnapshotControl *mSnapshotControl;
+ CxeFakeCameraDevice *mCameraDevice;
+ CxeFakeCameraDeviceControl *mCameraDeviceControl;
+};
+
+#endif /* UNITTEST_CXESNAPSHOTCONTROL_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxesnapshotcontrol/unittest_cxesnapshotcontrol.pro Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,48 @@
+# Copyright (c) 2010 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:
+
+DEFINES *= CXE_USE_DUMMY_CAMERA
+
+include(../unittest.pri)
+
+TARGET = unittest_cxesnapshotcontrol
+
+LIBS *= -lecamsnapshot
+LIBS *= -lecamadvsettings
+LIBS *= -lecam
+LIBS *= -lecampluginsupport
+LIBS *= -lfbscli
+LIBS *= -lbitgdi
+
+SOURCES *= unittest_cxesnapshotcontrol.cpp
+SOURCES *= cxesnapshotcontrol.cpp
+SOURCES *= cxesnapshotcontrolprivate.cpp
+SOURCES *= cxedummycamera.cpp
+SOURCES *= cxecameradevice.cpp
+SOURCES *= cxefakecameradevice.cpp
+SOURCES *= cxefakecameradevicecontrol.cpp
+SOURCES *= cxeerrormappingsymbian.cpp
+SOURCES *= cxestate.cpp
+SOURCES *= cxestatemachine.cpp
+SOURCES *= cxestatemachinebase.cpp
+
+HEADERS *= unittest_cxesnapshotcontrol.h
+HEADERS *= cxesnapshotcontrol.h
+HEADERS *= cxesnapshotcontrolprivate.h
+HEADERS *= cxedummycamera.h
+HEADERS *= cxecameradevice.h
+HEADERS *= cxefakecameradevice.h
+HEADERS *= cxecameradevicecontrol.h
+HEADERS *= cxefakecameradevicecontrol.h
+HEADERS *= cxeerrormappingsymbian.h
+HEADERS *= cxestate.h
+HEADERS *= cxestatemachine.h
+HEADERS *= cxestatemachinebase.h
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxestatemachine/unittest_cxestatemachine.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxestatemachine/unittest_cxestatemachine.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -19,14 +19,18 @@
#include "unittest_cxestatemachine.h"
#include "cxestate.h"
#include "cxestatemachineunit.h"
-#include "cxeerrormappingsymbian.h" // CxeErrorHandlingSymbian
// -----------------------------------
// CxsStateMachine
// -----------------------------------
UnitTestCxeStateMachine::UnitTestCxeStateMachine()
-: mStateMachine(NULL), mStartState(NULL), mMiddleState(NULL), mEndState(NULL), mIsolatedState(NULL)
+: mStateMachine(NULL),
+ mStartState(NULL),
+ mMiddleState(NULL),
+ mEndState(NULL),
+ mIsolatedState(NULL)
{
+ qRegisterMetaType<CxeError::Id>("CxeError::Id");
}
UnitTestCxeStateMachine::~UnitTestCxeStateMachine()
@@ -106,25 +110,25 @@
// set state, when initial state is not set -> NOK
// check that handleStateChange is not called
// current state is undefined
- QVERIFY(!mStateMachine->setState(StartId, 2));
+ QVERIFY(!mStateMachine->setState(StartId));
QCOMPARE(mStateMachine->mHandleStateChangedCounter, 0);
- QCOMPARE(mStateMachine->stateId(), 0);
+ QCOMPARE(mStateMachine->stateId(), 0); // 0 - undefined state
// set start state as initial state, change to another state (allowed change) -> OK
// (there should be a call to state change, check the error code)
mStateMachine->setInitialState(StartId);
- QVERIFY(mStateMachine->setState(MiddleId, 0));
+ QVERIFY(mStateMachine->setState(MiddleId, CxeError::None));
QCOMPARE(mStateMachine->mHandleStateChangedCounter, 1);
QVERIFY(mStateMachine->mStateChangeStateId == MiddleId);
- QVERIFY(mStateMachine->mStateChangeErrorId == CxeErrorHandlingSymbian::map(0));
+ QCOMPARE(mStateMachine->mStateChangeErrorId, CxeError::None);
QVERIFY(mStateMachine->stateId() == MiddleId);
// set another state (allowed change) -> OK
- // check the error code is correct one (return value is mapped error value)
- QVERIFY(mStateMachine->setState(EndId, -1));
+ // check the error code is correct one
+ QVERIFY(mStateMachine->setState(EndId, CxeError::NotFound));
QCOMPARE(mStateMachine->mHandleStateChangedCounter, 2);
QVERIFY(mStateMachine->mStateChangeStateId == EndId);
- QVERIFY(mStateMachine->mStateChangeErrorId == CxeErrorHandlingSymbian::map(-1));
+ QCOMPARE(mStateMachine->mStateChangeErrorId, CxeError::NotFound);
QVERIFY(mStateMachine->stateId() == EndId);
// reset the counter for handleStateChanged slot
@@ -132,7 +136,7 @@
// set same state again -> OK
// but state change should not be called
- QVERIFY(mStateMachine->setState(EndId, 0));
+ QVERIFY(mStateMachine->setState(EndId, CxeError::None));
QCOMPARE(mStateMachine->mHandleStateChangedCounter, 0);
// setstate to a state that does not exists -> NOK
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxestatemachine/unittest_cxestatemachine.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxestatemachine/unittest_cxestatemachine.pro Thu Jul 15 01:55:05 2010 +0300
@@ -18,13 +18,11 @@
SOURCES *= unittest_cxestatemachine.cpp \
cxestatemachineunit.cpp \
cxestatemachinebase.cpp \
- cxeerrormappingsymbian.cpp \
cxestate.cpp
HEADERS *= unittest_cxestatemachine.h \
cxestatemachineunit.h \
cxestatemachinebase.h \
- cxeerrormappingsymbian.h \
cxestate.h \
cxeerror.h
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxestillcapturecontrolsymbian/unittest_cxestillcapturecontrolsymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxestillcapturecontrolsymbian/unittest_cxestillcapturecontrolsymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -26,6 +26,7 @@
#include "cxestillcapturecontrolsymbian.h"
#include "unittest_cxestillcapturecontrolsymbian.h"
#include "cxefakeviewfindercontrol.h"
+#include "cxesnapshotcontrol.h"
#include "cxesettingsmodel.h"
#include "cxesensoreventhandlersymbian.h"
#include "cxefilenamegeneratorsymbian.h"
@@ -64,20 +65,21 @@
mFakeCameraDeviceControl = new CxeFakeCameraDeviceControl();
mFakeCameraDevice = new CxeFakeCameraDevice();
mFakeCameraDevice->newCamera(mFakeCameraDeviceControl->cameraIndex(), mFakeCameraDeviceControl);
-
mViewfinderControl = new CxeFakeViewfinderControl();
+ mSnapshotControl = new CxeSnapshotControl(*mFakeCameraDevice);
mFilenameGenerator = new CxeFakeFilenameGenerator();
mSensorEventHandler = new CxeFakeSensorEventHandler();
mFakeAutoFocusControl = new CxeFakeAutoFocusControl();
mFakeQualityPresets = new CxeFakeQualityPresets();
mFakeFileSaveThread = new CxeFakeFileSaveThread();
-
+
mDiskMonitor = new CxeDiskMonitor(*mFakeSettings);
mStillCaptureControl = new CxeStillCaptureControlSymbian(
*mFakeCameraDevice,
*mViewfinderControl,
+ *mSnapshotControl,
*mFakeCameraDeviceControl,
*mFilenameGenerator,
*mSensorEventHandler,
@@ -106,6 +108,8 @@
mFilenameGenerator = 0;
delete mViewfinderControl;
mViewfinderControl = 0;
+ delete mSnapshotControl;
+ mSnapshotControl = 0;
delete mFakeCameraDeviceControl;
mFakeCameraDeviceControl = 0;
delete mFakeCameraDevice;
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxestillcapturecontrolsymbian/unittest_cxestillcapturecontrolsymbian.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxestillcapturecontrolsymbian/unittest_cxestillcapturecontrolsymbian.h Thu Jul 15 01:55:05 2010 +0300
@@ -26,6 +26,7 @@
class CxeFakeCameraDeviceControl;
class CxeStillCaptureControlSymbian;
class CxeFakeViewfinderControl;
+class CxeSnapshotControl;
class CxeFakeFilenameGenerator;
class CxeFilenameGenerator;
class CxeFakeSensorEventHandler;
@@ -68,6 +69,7 @@
CxeFakeCameraDeviceControl *mFakeCameraDeviceControl;
CxeFakeCameraDevice *mFakeCameraDevice;
CxeFakeViewfinderControl *mViewfinderControl;
+ CxeSnapshotControl *mSnapshotControl;
CxeFakeFilenameGenerator *mFilenameGenerator;
CxeFakeSensorEventHandler *mSensorEventHandler;
CxeStillCaptureControlSymbian *mStillCaptureControl;
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxestillcapturecontrolsymbian/unittest_cxestillcapturecontrolsymbian.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxestillcapturecontrolsymbian/unittest_cxestillcapturecontrolsymbian.pro Thu Jul 15 01:55:05 2010 +0300
@@ -1,4 +1,4 @@
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 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"
@@ -30,6 +30,8 @@
LIBS *= -lsensrvclient
LIBS *= -lsensrvutil
LIBS *= -lplatformenv
+LIBS *= -lefsrv
+LIBS *= -lcone
DEFINES *= CXE_USE_DUMMY_CAMERA
@@ -68,6 +70,8 @@
cxefilesavethread.cpp \
cxediskmonitor.cpp \
cxediskmonitorprivate.cpp \
+ cxesnapshotcontrol.cpp \
+ cxesnapshotcontrolprivate.cpp \
cxefakefilesavethread.cpp
HEADERS *= unittest_cxestillcapturecontrolsymbian.h \
@@ -116,4 +120,6 @@
cxefilesavethread.h \
cxediskmonitor.h \
cxediskmonitorprivate.h \
+ cxesnapshotcontrol.h \
+ cxesnapshotcontrolprivate.h \
cxequalitypresets.h
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxestillimagesymbian/unittest_cxestillimagesymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxestillimagesymbian/unittest_cxestillimagesymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -118,7 +118,7 @@
QVERIFY(!mCxeStillImageSymbian->dataItem());
QByteArray data("124343423423456e74576");
QString path = "\\Images\\Camera\\blaah.jpg";
- CxeImageDataItemSymbian* dataItem = new CxeImageDataItemSymbian(data, path, mCxeStillImageSymbian->id());
+ CxeImageDataItemSymbian* dataItem = new CxeImageDataItemSymbian(data, path, mCxeStillImageSymbian->id(), false);
mCxeStillImageSymbian->setDataItem(dataItem);
QVERIFY(mCxeStillImageSymbian->dataItem() == dataItem);
CX_DEBUG_EXIT_FUNCTION();
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxestillimagesymbian/unittest_cxestillimagesymbian.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxestillimagesymbian/unittest_cxestillimagesymbian.pro Thu Jul 15 01:55:05 2010 +0300
@@ -1,4 +1,4 @@
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 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"
@@ -15,6 +15,7 @@
LIBS *= -lplatformenv
LIBS *= -lsysutil
+LIBS *= -lefsrv
SOURCES *= unittest_cxestillimagesymbian.cpp \
cxeimagedataitemsymbian.cpp \
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxethumbnailmanagersymbian/unittest_cxethumbnailmanagersymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxethumbnailmanagersymbian/unittest_cxethumbnailmanagersymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -48,33 +48,17 @@
{
CX_DEBUG_ENTER_FUNCTION();
- QSignalSpy thumbnailReadySpy(mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, int)));
QString filename;
- QVERIFY(thumbnailReadySpy.isValid());
-
// case 1: testing with wrong dummy file, we should get an error code with thumbnailready
// since filename is invalid
- mThumbnailManager->createThumbnail(filename, QPixmap());
-
- QCOMPARE(thumbnailReadySpy.count(), 1 );
- if (thumbnailReadySpy.count() > 0) {
- QList<QVariant> initModeArguments = thumbnailReadySpy.takeFirst();
- // we are only interested in error code in this case 1
- QCOMPARE(initModeArguments.at(1).toInt(), KErrNotFound);
- }
+ mThumbnailManager->createThumbnail(filename, QImage());
+
// case 1: testing with proper file name, we shouldnt get an error code with thumbnailready
// since filename is valid
filename = QString("c:\\test.jpg");
- mThumbnailManager->createThumbnail(filename, QPixmap());
-
- QCOMPARE( thumbnailReadySpy.count(), 1 );
- if (thumbnailReadySpy.count() > 0) {
- QList<QVariant> initModeArguments = thumbnailReadySpy.takeFirst();
- // we are only interested in error code in this case 1
- QCOMPARE(initModeArguments.at(1).toInt(), KErrNone);
- }
+ mThumbnailManager->createThumbnail(filename, QImage());
CX_DEBUG_EXIT_FUNCTION();
}
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxevideocapturecontrolsymbian/cxevideocapturecontrolsymbianunit.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxevideocapturecontrolsymbian/cxevideocapturecontrolsymbianunit.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -23,15 +23,16 @@
#include "cxutils.h"
#include "cxediskmonitor.h"
-CxeVideoCaptureControlSymbianUnit::CxeVideoCaptureControlSymbianUnit(
+CxeVideoCaptureControlSymbianUnit::CxeVideoCaptureControlSymbianUnit(
CxeCameraDevice &cameraDevice,
CxeViewfinderControl &viewfinderControl,
+ CxeSnapshotControl &snapshotControl,
CxeCameraDeviceControl &cameraDeviceControl,
CxeFilenameGenerator &nameGenerator,
CxeSettings &settings,
CxeQualityPresets &qualityPresets,
CxeDiskMonitor &diskMonitor)
- : CxeVideoCaptureControlSymbian(cameraDevice, viewfinderControl,
+ : CxeVideoCaptureControlSymbian(cameraDevice, viewfinderControl, snapshotControl,
cameraDeviceControl, nameGenerator,
settings, qualityPresets, diskMonitor)
{
@@ -50,7 +51,7 @@
// init video recoder
if (state() == CxeVideoCaptureControl::Idle) {
if (mVideoRecorder == NULL) {
- TRAPD(initErr, mVideoRecorder =
+ TRAPD(initErr, mVideoRecorder =
new CxeFakeVideoRecorderUtility( *this ,
KAudioPriorityVideoRecording,
TMdaPriorityPreference( KAudioPrefVideoRecording )));
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxevideocapturecontrolsymbian/cxevideocapturecontrolsymbianunit.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxevideocapturecontrolsymbian/cxevideocapturecontrolsymbianunit.h Thu Jul 15 01:55:05 2010 +0300
@@ -27,13 +27,14 @@
* CxeCameraDeviceControlSymbian except for that CxeFakeCameraDevice is used
* instead of the real implementation.
*/
-class CxeVideoCaptureControlSymbianUnit : public CxeVideoCaptureControlSymbian
+class CxeVideoCaptureControlSymbianUnit : public CxeVideoCaptureControlSymbian
{
Q_OBJECT
public:
CxeVideoCaptureControlSymbianUnit(CxeCameraDevice &cameraDevice,
CxeViewfinderControl &viewfinderControl,
+ CxeSnapshotControl &snapshotControl,
CxeCameraDeviceControl &cameraDeviceControl,
CxeFilenameGenerator &nameGenerator,
CxeSettings &settings,
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxevideocapturecontrolsymbian/unittest_cxevideocapturecontrolsymbian.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxevideocapturecontrolsymbian/unittest_cxevideocapturecontrolsymbian.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -21,6 +21,7 @@
#include "unittest_cxevideocapturecontrolsymbian.h"
#include "cxevideocapturecontrolsymbian.h"
#include "cxevideocapturecontrolsymbianunit.h"
+#include "cxesnapshotcontrol.h"
#include "cxefakefilenamegenerator.h"
#include "cxedummycamera.h"
#include "cxefakecameradevice.h"
@@ -65,6 +66,7 @@
mCameraDeviceControl->setMode(Cxe::VideoMode);
mCameraDevice = new CxeFakeCameraDevice();
mViewfinderControl = new CxeFakeViewfinderControl();
+ mSnapshotControl = new CxeSnapshotControl(*mCameraDevice);
mSettings = new CxeFakeSettings();
mSettings->set(CxeSettingIds::VIDEO_SHOWCAPTURED, -1);
mFilenameGeneratorSymbian = new CxeFakeFilenameGenerator();
@@ -73,6 +75,7 @@
mDiskMonitor = new CxeDiskMonitor(*mSettings);
mCxeVideoCaptureControlSymbian = new CxeVideoCaptureControlSymbianUnit(*mCameraDevice,
*mViewfinderControl,
+ *mSnapshotControl,
*mCameraDeviceControl,
*mFilenameGeneratorSymbian,
*mSettings,
@@ -102,6 +105,8 @@
mFilenameGeneratorSymbian = 0;
delete mViewfinderControl;
mViewfinderControl = 0;
+ delete mSnapshotControl;
+ mSnapshotControl = 0;
delete mCameraDeviceControl;
mCameraDeviceControl = 0;
delete mCameraDevice;
@@ -230,21 +235,22 @@
CX_DEBUG_EXIT_FUNCTION();
}
-void UnitTestCxeVideoCaptureControlSymbian::testHandleSnapshotEvent()
+void UnitTestCxeVideoCaptureControlSymbian::testHandleSnapshotReady()
{
CX_DEBUG_ENTER_FUNCTION();
+ QImage snapshot;
- QSignalSpy spy(mCxeVideoCaptureControlSymbian, SIGNAL(snapshotReady(CxeError::Id, const QPixmap&, const QString&)));
+ QSignalSpy spy(mCxeVideoCaptureControlSymbian, SIGNAL(snapshotReady(CxeError::Id, const QImage&, const QString&)));
mCxeVideoCaptureControlSymbian->deinit();
doPrepareStuff();
- mCxeVideoCaptureControlSymbian->handleSnapshotEvent(CxeError::OutOfMemory);
+ mCxeVideoCaptureControlSymbian->handleSnapshotReady(CxeError::OutOfMemory, snapshot);
QCOMPARE(mCxeVideoCaptureControlSymbian->state(), CxeVideoCaptureControl::Ready);
// check that we receive this signal once the snapshot is ready
QVERIFY(CxeTestUtils::waitForSignal(spy, 1000));
doPrepareStuff();
- mCxeVideoCaptureControlSymbian->handleSnapshotEvent(CxeError::None);
+ mCxeVideoCaptureControlSymbian->handleSnapshotReady(CxeError::None, snapshot);
QVERIFY(CxeTestUtils::waitForSignal(spy, 1000));
CX_DEBUG_EXIT_FUNCTION();
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxevideocapturecontrolsymbian/unittest_cxevideocapturecontrolsymbian.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxevideocapturecontrolsymbian/unittest_cxevideocapturecontrolsymbian.h Thu Jul 15 01:55:05 2010 +0300
@@ -23,6 +23,7 @@
class CxeFakeCameraDevice;
class CxeFakeViewfinderControl;
+class CxeSnapshotControl;
class CxeFakeCameraDeviceControl;
class CxeFakeSettings;
class CxeFakeFilenameGenerator;
@@ -53,7 +54,7 @@
void testReset();
void testFilename();
void testSnapshot();
- void testHandleSnapshotEvent();
+ void testHandleSnapshotReady();
void testInit();
void testDeinit();
void testHandleSoundPlayed();
@@ -70,6 +71,7 @@
CxeVideoCaptureControlSymbianUnit *mCxeVideoCaptureControlSymbian;
CxeFakeCameraDevice *mCameraDevice;
CxeFakeViewfinderControl *mViewfinderControl;
+ CxeSnapshotControl *mSnapshotControl;
CxeFakeCameraDeviceControl *mCameraDeviceControl;
CxeFakeSettings *mSettings;
CxeFakeFilenameGenerator *mFilenameGeneratorSymbian;
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxevideocapturecontrolsymbian/unittest_cxevideocapturecontrolsymbian.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxevideocapturecontrolsymbian/unittest_cxevideocapturecontrolsymbian.pro Thu Jul 15 01:55:05 2010 +0300
@@ -1,4 +1,4 @@
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 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"
@@ -25,7 +25,8 @@
LIBS *= -lmmfcontrollerframework
LIBS *= -lplatformenv
LIBS *= -lsysutil
-
+LIBS *= -lefsrv
+LIBS *= -lcone
DEFINES *= CXE_USE_DUMMY_CAMERA
@@ -52,6 +53,8 @@
cxefakequalitypresets.cpp \
cxediskmonitor.cpp \
cxediskmonitorprivate.cpp \
+ cxesnapshotcontrol.cpp \
+ cxesnapshotcontrolprivate.cpp \
cxesysutil.cpp
HEADERS *= unittest_cxevideocapturecontrolsymbian.h \
@@ -83,4 +86,6 @@
cxutils.h \
cxediskmonitor.h \
cxediskmonitorprivate.h \
+ cxesnapshotcontrol.h \
+ cxesnapshotcontrolprivate.h \
cxesysutil.h
--- a/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeviewfindercontrolsymbian/unittest_cxeviewfindercontrolsymbian.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxeviewfindercontrolsymbian/unittest_cxeviewfindercontrolsymbian.pro Thu Jul 15 01:55:05 2010 +0300
@@ -1,4 +1,4 @@
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 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"
@@ -21,8 +21,8 @@
LIBS *= -lfbscli
LIBS *= -lbitgdi
LIBS *= -lcone
-LIBS *= -lalfclient
-LIBS *= -lalfdecoderserverclient
+LIBS *= -lws32
+LIBS *= -lgdi
DEFINES *= CXE_USE_DUMMY_CAMERA
--- a/camerauis/cameraxui/cxui/cxui.pro Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/cxui.pro Thu Jul 15 01:55:05 2010 +0300
@@ -24,13 +24,19 @@
TARGET.UID3 = 0x101f857a
TARGET.VID = VID_DEFAULT
TARGET.EPOCHEAPSIZE = 0x020000 0x1000000
- ICON = ./icons/cxui.svg
+ SKINICON = qtg_large_camera
RSS_RULES = "group_name=\"Qt Camera\";"
# Fix for QMake translating INCLUDEPATH to SYSTEMINCLUDE
# and TraceCompiler needing USERINCLUDE.
MMP_RULES += "USERINCLUDE traces"
}
+# export sound file
+symbian {
+ CXUI_DIR = $$section(PWD,":",1)
+ BLD_INF_RULES.prj_exports += "$$CXUI_DIR/data/selftimer.wav /epoc32/data/z/system/sounds/digital/selftimer.wav"
+}
+
DEPENDPATH += ../cxengine/inc/api
VPATH += src \
inc
@@ -45,7 +51,6 @@
-lcxengine \
-lapmime \
-lcommonui \
- -lxqsettingsmanager \
-lxqutils \
-lxqservice \
-lxqserviceutil \
@@ -54,7 +59,9 @@
-lefsrv \
-lws32 \
-lgdi \
- -lapgrfx
+ -lapgrfx \
+ -lusbman \
+ -lthumbnailmanagerqt
CONFIG += hb
CONFIG += service
@@ -68,6 +75,8 @@
HEADERS += cxuiapplication.h \
cxuiapplicationframeworkmonitor.h \
cxuiapplicationframeworkmonitorprivate.h \
+ cxuiapplicationstate.h \
+ cxuiview.h \
cxuiprecaptureview.h \
cxuistillprecaptureview.h \
cxuivideoprecaptureview.h \
@@ -83,19 +92,22 @@
cxuisettingradiobuttonlist.h \
cxuiscenelabel.h \
cxuierrormanager.h \
- cxuistandby.h \
cxuisettingradiobuttonlistmodel.h \
cxuisettingsinfo.h \
cxuisettingxmlreader.h \
cxuiserviceprovider.h \
cxuiscenemodeview.h \
cxuizoomslider.h \
+ cxuifullscreenpopup.h \
+ cxuieventlog.h \
traces/OstTraceDefinitions.h
SOURCES += main.cpp \
cxuiapplication.cpp \
cxuiapplicationframeworkmonitor.cpp \
cxuiapplicationframeworkmonitorprivate.cpp \
+ cxuiapplicationstate.cpp \
+ cxuiview.cpp \
cxuiprecaptureview.cpp \
cxuivideoprecaptureview.cpp \
cxuistillprecaptureview.cpp \
@@ -110,13 +122,14 @@
cxuisettingradiobuttonlist.cpp \
cxuiscenelabel.cpp \
cxuierrormanager.cpp \
- cxuistandby.cpp \
cxuisettingradiobuttonlistmodel.cpp \
cxuisettingsinfo.cpp \
cxuisettingxmlreader.cpp \
cxuiserviceprovider.cpp \
cxuiscenemodeview.cpp \
- cxuizoomslider.cpp
+ cxuizoomslider.cpp \
+ cxuifullscreenpopup.cpp \
+ cxuieventlog.cpp
RESOURCES += cxui.qrc
--- a/camerauis/cameraxui/cxui/cxui.qrc Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/cxui.qrc Thu Jul 15 01:55:05 2010 +0300
@@ -1,15 +1,16 @@
<RCC>
<qresource prefix="/camerax" >
+ <file alias="cxui.css" >layouts/cxui.css</file>
</qresource>
<qresource prefix="/xml" >
<file alias="setting_scenemode.docml" >layouts/setting_scenemode.docml</file>
- <file alias="standbymode_popup.docml" >layouts/standbymode_popup.docml</file>
<file alias="view_still_precapture.docml" >layouts/view_still_precapture.docml</file>
<file alias="view_video_precapture.docml" >layouts/view_video_precapture.docml</file>
<file alias="view_postcapture.docml" >layouts/view_postcapture.docml</file>
<file alias="errornote_popup.docml" >layouts/errornote_popup.docml</file>
<file alias="setting.docml" >layouts/setting.docml</file>
<file alias="setting_slider.docml" >layouts/setting_slider.docml</file>
+ <file alias="full_screen_popup.docml" >layouts/full_screen_popup.docml</file>
<file alias="image_setting.xml" >layouts/image_setting.xml</file>
<file alias="video_setting.xml" >layouts/video_setting.xml</file>
</qresource>
Binary file camerauis/cameraxui/cxui/data/selftimer.wav has changed
--- a/camerauis/cameraxui/cxui/icons/cxui.svg Thu May 13 21:30:19 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,160 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- baseProfile="tiny"
- height="16px"
- version="1.1"
- viewBox="0 0 16 16"
- width="16px"
- x="0px"
- y="0px"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.45.1"
- sodipodi:docname="cxui.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:docbase="J:\">
- <metadata
- id="metadata33">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs31" />
- <sodipodi:namedview
- inkscape:window-height="575"
- inkscape:window-width="753"
- inkscape:pageshadow="2"
- inkscape:pageopacity="0.0"
- guidetolerance="10.0"
- gridtolerance="10.0"
- objecttolerance="10.0"
- borderopacity="1.0"
- bordercolor="#666666"
- pagecolor="#ffffff"
- id="base"
- inkscape:zoom="23.5625"
- inkscape:cx="8"
- inkscape:cy="8"
- inkscape:window-x="46"
- inkscape:window-y="46"
- inkscape:current-layer="svg2" />
- <path
- d="M1,3C0.447,3,0,3.447,0,4v9c0,0.553,0.447,1,1,1h14c0.553,0,1-0.447,1-1V4 c0-0.553-0.447-1-1-1H1z"
- fill="#030303"
- fill-opacity="0.7"
- stroke-opacity="0.7"
- id="path4" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- id="SVGID_1_"
- x1="7.9995"
- x2="7.9995"
- y1="3.2114"
- y2="15.0201">
- <stop
- offset="0"
- style="stop-color:#E6E6F5"
- id="stop7" />
- <stop
- offset="1"
- style="stop-color:#333342"
- id="stop9" />
- </linearGradient>
- <rect
- fill="url(#SVGID_1_)"
- height="9"
- width="14"
- x="1"
- y="4"
- id="rect11" />
- <rect
- height="7"
- width="3"
- x="1"
- y="5"
- id="rect13" />
- <rect
- fill="none"
- height="16"
- width="16"
- id="rect15" />
- <path
- d="M9,5.5c-1.656,0-3,1.342-3,3c0,1.656,1.344,3,3,3s3-1.344,3-3C12,6.842,10.656,5.5,9,5.5z"
- fill="#FFFFFF"
- fill-opacity="0.5"
- stroke-opacity="0.5"
- id="path17" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- id="SVGID_2_"
- x1="9"
- x2="9"
- y1="10.5"
- y2="6.5005">
- <stop
- offset="0"
- style="stop-color:#404040"
- id="stop20" />
- <stop
- offset="1"
- style="stop-color:#000000"
- id="stop22" />
- </linearGradient>
- <path
- d="M9,6.5c-1.104,0-2,0.896-2,2s0.896,2,2,2s2-0.896,2-2S10.104,6.5,9,6.5z"
- fill="url(#SVGID_2_)"
- id="path24" />
- <circle
- cx="9"
- cy="8.5"
- r="1.5"
- id="circle26" />
- <rect
- fill="#FFFFFF"
- height="1"
- width="2"
- x="12"
- y="5"
- id="rect28" />
- <path
- sodipodi:type="star"
- style="opacity:0.94240836;fill:#d6c838;fill-opacity:0.88888891;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path2185"
- sodipodi:sides="5"
- sodipodi:cx="9.5490713"
- sodipodi:cy="2.0795755"
- sodipodi:r1="2.2878442"
- sodipodi:r2="1.1439221"
- sodipodi:arg1="0.7066142"
- sodipodi:arg2="1.3349327"
- inkscape:flatsided="false"
- inkscape:rounded="0"
- inkscape:randomized="0"
- d="M 11.289124,3.5649867 L 9.8163862,3.1918257 L 8.6740673,4.1934816 L 8.5738634,2.6775113 L 7.268236,1.9006302 L 8.6790448,1.33687 L 9.0144416,-0.14492486 L 9.9865733,1.0226225 L 11.499487,0.88370401 L 10.689489,2.1690482 L 11.289124,3.5649867 z "
- transform="matrix(1.5393553,0,0,1.408644,-1.7933311,0.4035599)" />
- <path
- style="opacity:0.94240836;fill:#ff2e0f;fill-opacity:0.8888889;fill-rule:nonzero;stroke:#000000;stroke-width:0.2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3370"
- d="M 14.630774,11.24099 C 14.536244,11.293201 14.819308,11.135621 14.913602,11.082985 C 14.481821,11.352087 13.722787,11.77327 14.656116,11.243166 C 14.601222,11.283527 14.543867,11.319822 14.486831,11.357029 C 14.437422,11.390808 14.396114,11.433944 14.351156,11.472963 C 14.309178,11.515651 14.26657,11.557634 14.223886,11.599601 C 14.182552,11.64315 14.139433,11.684905 14.096701,11.727058 C 14.055728,11.779123 14.013745,11.830689 13.971712,11.882115 C 13.930618,11.932717 13.901793,11.991086 13.868625,12.046694 C 13.834262,12.097799 13.804,12.151471 13.771122,12.203569 C 13.74198,12.259923 13.712319,12.315887 13.682367,12.371835 C 13.645599,12.420172 13.611237,12.469783 13.575435,12.518766 C 13.576382,12.524441 13.542269,12.564221 13.539221,12.568399 L 12.964509,12.8166 C 12.977159,12.801279 12.983841,12.78099 13.00246,12.770636 C 13.03838,12.720619 13.065683,12.665813 13.108017,12.620824 C 13.138052,12.568359 13.175201,12.518226 13.201925,12.46288 C 13.230706,12.407601 13.254233,12.348305 13.297659,12.302125 C 13.329751,12.242915 13.362423,12.185108 13.397584,12.127804 C 13.439735,12.076333 13.485971,12.026575 13.519242,11.969082 C 13.560668,11.925564 13.600873,11.881029 13.646456,11.841713 C 13.687757,11.798172 13.727797,11.753552 13.773357,11.714319 C 13.816095,11.671426 13.855641,11.624515 13.905953,11.589889 C 13.963378,11.550947 14.020518,11.509498 14.076653,11.467879 C 15.811177,10.450909 13.771639,11.654918 14.33755,11.305861 C 14.598104,11.152026 14.854897,10.991197 15.121717,10.848282 L 14.630774,11.24099 z " />
- <path
- style="opacity:0.94240836;fill:#ff2e0f;fill-opacity:0.88888891;fill-rule:nonzero;stroke:#000000;stroke-width:0.2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3372"
- d="M 12.536373,11.151805 C 12.479091,11.112926 12.425863,11.066349 12.373213,11.020818 C 12.318706,10.984622 12.274062,10.936464 12.225987,10.892819 C 12.180124,10.852651 12.118378,10.841646 12.062404,10.820224 C 11.993358,10.796414 11.920203,10.799144 11.848539,10.793666 C 11.764854,10.791607 11.681139,10.792432 11.597439,10.792411 C 11.520114,10.78747 11.445488,10.807058 11.370376,10.823301 C 11.31182,10.851463 11.25456,10.880325 11.197936,10.912724 C 12.433537,10.203519 11.242957,10.886316 11.129455,10.95397 C 10.964788,11.05212 11.461299,10.761935 11.62806,10.667387 C 11.82895,10.55349 11.227849,10.897966 11.02959,11.016383 C 10.863384,11.115655 11.365295,10.823458 11.533148,10.726996 C 11.476649,10.755902 11.431493,10.800249 11.38141,10.837915 C 11.337848,10.878924 11.295825,10.921376 11.252854,10.962975 C 11.206382,11.00289 11.170524,11.053058 11.129928,11.097647 C 11.092807,11.158857 11.067126,11.226268 11.038356,11.291673 C 11.005691,11.346797 10.978703,11.40475 10.948581,11.46091 C 10.915377,11.519644 10.903042,11.585876 10.884924,11.649985 C 10.856841,11.718877 10.856743,11.79285 10.847839,11.865235 C 10.843555,11.948771 10.844701,12.032437 10.844233,12.116043 C 10.830979,12.188576 10.870591,12.24475 10.890369,12.309567 C 10.909887,12.366867 10.953154,12.407295 10.984984,12.45545 C 11.007428,12.514726 11.06428,12.537513 11.105022,12.574156 C 11.161423,12.611161 11.22794,12.626325 11.291582,12.646683 C 11.372991,12.666699 11.454079,12.686484 11.535801,12.705221 C 11.619169,12.718924 11.703733,12.71686 11.787822,12.71948 C 11.852203,12.701 11.915762,12.676981 11.977319,12.65036 C 12.056025,12.643997 12.131451,12.624951 12.208836,12.610477 C 12.286379,12.601106 12.362213,12.581633 12.437697,12.561528 C 12.515374,12.555659 12.583081,12.517888 12.654168,12.490024 C 12.779027,12.421456 12.403038,12.624564 12.277914,12.692649 C 12.326236,12.656994 12.356079,12.603509 12.392588,12.556897 C 12.398225,12.549 12.403861,12.541103 12.409497,12.533207 L 12.98081,12.277956 C 12.976298,12.288174 12.971786,12.298391 12.967274,12.308609 C 12.93166,12.359492 12.892236,12.406932 12.858798,12.459415 C 12.632643,12.59766 12.418155,12.779405 12.16321,12.874737 C 12.089941,12.899359 12.019497,12.93215 11.940801,12.938494 C 11.865045,12.955847 11.790582,12.977118 11.713002,12.985849 C 11.636244,12.999757 11.558608,13.012149 11.483594,13.033306 C 11.417596,13.057385 11.357855,13.092193 11.284124,13.084018 C 11.197723,13.080109 11.110795,13.079304 11.025856,13.060563 C 10.942758,13.039451 10.859091,13.020237 10.776541,12.997001 C 10.71014,12.973551 10.640782,12.958337 10.581895,12.917287 C 10.535529,12.87375 10.479432,12.840023 10.449209,12.779439 C 10.412728,12.725506 10.368785,12.677429 10.34474,12.614874 C 10.318807,12.543426 10.280684,12.478215 10.290239,12.398374 C 10.290213,12.313935 10.289592,12.229478 10.291787,12.145058 C 10.297734,12.068362 10.295745,11.990298 10.319518,11.916022 C 10.337205,11.849975 10.354913,11.78339 10.378901,11.71923 C 10.406602,11.660623 10.42984,11.601228 10.468884,11.548823 C 10.500626,11.483495 10.531777,11.417505 10.558334,11.34943 C 10.595847,11.29904 10.618516,11.239494 10.675418,11.205108 C 10.716885,11.161461 10.756836,11.116372 10.803027,11.077518 C 10.850615,11.034367 10.892757,10.983201 10.951582,10.953602 C 12.76177,9.8994863 9.8120897,11.74785 11.613308,10.562924 C 11.636263,10.547824 10.141534,11.417376 11.684847,10.521976 C 11.744708,10.492838 11.800431,10.455161 11.86856,10.447873 C 11.94582,10.436899 12.021218,10.417484 12.100421,10.42687 C 12.184926,10.427049 12.269484,10.426228 12.353923,10.430254 C 12.430498,10.439828 12.509003,10.439224 12.58119,10.471408 C 12.644687,10.497556 12.71265,10.512359 12.760138,10.56646 C 12.807052,10.608172 12.851257,10.653264 12.902641,10.689812 C 12.955006,10.733819 13.005046,10.782137 13.06712,10.811974 L 12.536373,11.151805 z " />
- <path
- style="opacity:0.94240836;fill:#ff2e0f;fill-opacity:0.88888891;fill-rule:nonzero;stroke:#000000;stroke-width:0.2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3374"
- d="M 13.693167,10.50844 C 13.72605,10.587373 13.763502,10.664162 13.801348,10.740812 C 13.83602,10.805891 13.875315,10.868176 13.9148,10.930338 C 13.948877,10.981628 13.986887,11.030648 14.024252,11.079411 C 14.051665,11.132902 14.092621,11.17577 14.126284,11.22406 C 14.160688,11.283316 14.208336,11.331887 14.253013,11.38308 C 14.286779,11.440917 14.333007,11.488714 14.374828,11.540352 C 14.420516,11.588389 14.465529,11.636852 14.511604,11.684467 C 14.558096,11.725133 14.590469,11.779082 14.627595,11.827936 C 14.681255,11.858472 14.715201,11.908795 14.757878,11.950847 C 14.805211,11.986976 14.847727,12.0286 14.891885,12.068326 C 14.933797,12.131457 14.990385,12.181018 15.042435,12.234662 C 15.07404,12.261042 15.098477,12.294022 15.126607,12.323818 L 14.593515,12.647234 C 14.567296,12.619304 14.545418,12.587291 14.514932,12.563522 C 14.460338,12.50949 14.405633,12.456387 14.358189,12.395763 C 14.312596,12.355498 14.266755,12.315483 14.221852,12.274425 C 14.178362,12.23293 14.139643,12.186338 14.090695,12.149997 C 14.053827,12.101853 14.022388,12.04905 13.976492,12.008615 C 13.930428,11.959921 13.884377,11.911282 13.839521,11.861462 C 13.797695,11.810362 13.75108,11.763396 13.717836,11.705554 C 13.673949,11.654197 13.627084,11.605194 13.590484,11.548033 C 13.55491,11.496657 13.513331,11.449678 13.483195,11.394039 C 13.446296,11.345458 13.406444,11.298257 13.37498,11.245668 C 13.335226,11.179863 13.294886,11.11435 13.261162,11.045118 C 13.22412,10.972468 13.190017,10.897789 13.149421,10.827059 L 13.693167,10.50844 z " />
-</svg>
--- a/camerauis/cameraxui/cxui/inc/cxuiapplication.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/inc/cxuiapplication.h Thu Jul 15 01:55:05 2010 +0300
@@ -35,6 +35,11 @@
#endif // Q_WS_S60
signals:
+ /*!
+ * Testing framework support.
+ * Application ready signal is emitted after startup when UI is fully loaded and functional.
+ */
+ void applicationReady();
#if defined(Q_WS_S60)
void symbianEvent(const QSymbianEvent *e);
#endif // Q_WS_S60
--- a/camerauis/cameraxui/cxui/inc/cxuiapplicationframeworkmonitor.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/inc/cxuiapplicationframeworkmonitor.h Thu Jul 15 01:55:05 2010 +0300
@@ -46,11 +46,12 @@
};
public:
- CxuiApplicationFrameworkMonitor(CxuiApplication &application, CxeSettings& settings);
+ CxuiApplicationFrameworkMonitor(CxuiApplication &application, CxeSettings &settings);
virtual ~CxuiApplicationFrameworkMonitor();
public:
ForegroundState foregroundState() const;
+ bool isUsbMassMemoryModeActive() const;
signals:
/*!
@@ -64,8 +65,18 @@
*/
void batteryEmpty();
+ /*!
+ * USB mass memory mode was just activated or deactivated.
+ * @param active If true, mass memory mode was activated, and mass memory cannot be accessed.
+ * Otherwise mass memory mode was deactivated, and mass memory is again accessible.
+ */
+ void usbMassMemoryModeToggled(bool active);
+
+
private:
- CxuiApplicationFrameworkMonitorPrivate* p;
+ CxuiApplicationFrameworkMonitorPrivate *p;
+
+ friend class CxuiApplicationFrameworkMonitorPrivate;
};
#endif // CXUIAPPLICATIONFRAMEWORKMONITOR_H
--- a/camerauis/cameraxui/cxui/inc/cxuiapplicationframeworkmonitorprivate.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/inc/cxuiapplicationframeworkmonitorprivate.h Thu Jul 15 01:55:05 2010 +0300
@@ -21,6 +21,7 @@
#include <QVariant>
#include "cxuiapplicationframeworkmonitor.h"
+
class CxeSettings;
class CxuiApplication;
#ifdef Q_OS_SYMBIAN
@@ -28,6 +29,7 @@
class RWindowGroup;
class QString;
class QSymbianEvent;
+class CxuiEventLog;
#endif // Q_OS_SYMBIAN
@@ -35,16 +37,14 @@
{
Q_OBJECT
-public:
- CxuiApplicationFrameworkMonitorPrivate(CxuiApplication &application, CxeSettings& settings);
+private:
+ CxuiApplicationFrameworkMonitorPrivate(CxuiApplicationFrameworkMonitor *parent,
+ CxuiApplication &application,
+ CxeSettings &settings);
virtual ~CxuiApplicationFrameworkMonitorPrivate();
-public:
CxuiApplicationFrameworkMonitor::ForegroundState foregroundState() const;
-
-signals:
- void foregroundStateChanged(CxuiApplicationFrameworkMonitor::ForegroundState t);
- void batteryEmpty();
+ bool isUsbMassMemoryModeActive() const;
#ifdef Q_OS_SYMBIAN
private slots:
@@ -53,25 +53,33 @@
private:
void init();
- bool handleWindowServerEvent(const QSymbianEvent *event);
+ void handleWindowServerEvent(const QSymbianEvent *event);
+ void handleUsbPropertyEvent(unsigned long int key, QVariant value);
void setState(CxuiApplicationFrameworkMonitor::ForegroundState state);
CxuiApplicationFrameworkMonitor::ForegroundState getCurrentState();
unsigned int focusedApplicationUid();
#endif // Q_OS_SYMBIAN
-
private:
+ CxuiApplicationFrameworkMonitor *q;
CxuiApplication &mApplication;
- CxeSettings& mSettings;
+ CxeSettings &mSettings;
#ifdef Q_OS_SYMBIAN
RWsSession &mWsSession;
RWindowGroup &mWindowGroup;
int mWindowGroupId;
QString mWindowGroupName;
+
int mKeyLockState;
int mBatteryStatus;
+ int mUsbPersonality;
+
+ CxuiEventLog *mEventLog;
#endif // Q_OS_SYMBIAN
+
CxuiApplicationFrameworkMonitor::ForegroundState mState;
+
+ friend class CxuiApplicationFrameworkMonitor;
};
#endif // CXUIAPPLICATIONFRAMEWORKMONITORPRIVATE_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxui/inc/cxuiapplicationstate.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef CXUIAPPLICATIONSTATE_H
+#define CXUIAPPLICATIONSTATE_H
+
+#include <QObject>
+#include "cxeerror.h"
+#include "cxuiapplicationframeworkmonitor.h"
+
+class CxuiApplication;
+class CxuiCaptureKeyHandler;
+class CxeSettings;
+class CxuiDocumentLoader;
+class CxuiErrorManager;
+class CxuiEventLog;
+
+
+/*!
+* @brief Class maintaining application overall state.
+*/
+class CxuiApplicationState : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(State)
+
+public:
+
+ enum State {
+ Normal,
+ Standby,
+ Error,
+ Background
+ };
+
+ CxuiApplicationState(CxuiApplication &application,
+ CxeSettings &settings,
+ CxuiDocumentLoader *documentLoader);
+ ~CxuiApplicationState();
+
+
+public:
+ State currentState() const;
+
+signals:
+ void stateChanged(CxuiApplicationState::State newState,
+ CxuiApplicationState::State oldState);
+
+public slots:
+ void startMonitoring();
+ void handleApplicationError(CxeError::Id error);
+ void enterStandby();
+ void exitStandby();
+
+private slots:
+ void handleForegroundStateChanged(CxuiApplicationFrameworkMonitor::ForegroundState state);
+ void handleUsbMassMemoryModeChanged(bool active);
+ void handleBatteryEmpty();
+ void handleSevereError();
+ void handleErrorCleared();
+
+private:
+ void setState(State newState);
+ void checkErrors();
+
+private:
+ State mState;
+ CxuiApplicationFrameworkMonitor *mApplicationMonitor;
+ CxuiErrorManager *mErrorManager;
+ CxuiEventLog *mEventLog;
+};
+
+#endif // CXUIAPPLICATIONSTATE_H
--- a/camerauis/cameraxui/cxui/inc/cxuienums.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/inc/cxuienums.h Thu Jul 15 01:55:05 2010 +0300
@@ -48,15 +48,19 @@
static const char *SCENEMODE_SETTING_XML = ":/xml/setting_scenemode.docml";
- static const char *STANDBY_POPUP_XML = ":/xml/standbymode_popup.docml";
static const char *ERROR_POPUP_XML = ":/xml/errornote_popup.docml";
static const char *SETTINGS_SLIDER_DIALOG_XML = ":/xml/setting_slider.docml";
+ static const char *FULL_SCREEN_POPUP_XML = ":/xml/full_screen_popup.docml";
+
+
// Graphics
static const char *TRANSPARENT_BACKGROUND_GRAPHIC = "qtg_fr_popup_trans";
// Sections
+ static const char *STILL_PRE_CAPTURE_INDICATORS_SECTION = "still_capture_indicators";
static const char *STILL_PRE_CAPTURE_WIDGETS_SECTION = "still_capture_with_widgets";
+ static const char *VIDEO_PRE_CAPTURE_INDICATORS_SECTION = "video_capture_indicators";
static const char *VIDEO_PRE_CAPTURE_WIDGETS_SECTION = "video_capture_with_widgets";
static const char *POST_CAPTURE_WIDGETS_SECTION = "post_capture_with_widgets";
static const char *STILL_PRE_CAPTURE_EMBEDDED_SECTION = "still_embedded_mode";
@@ -71,7 +75,6 @@
// Widgets
// In order to be able to refer to a widget, we need to know its object name.
static const char *STILL_PRE_CAPTURE_VIEW = "still_capture_view";
- static const char *STILL_SCENES_VIEW = "settings_scenes_view";
static const char *STILL_PRE_CAPTURE_TOOLBAR = "toolbar";
static const char *STILL_PRE_CAPTURE_FLASH_ACTION = "cxui_action_flash";
static const char *STILL_PRE_CAPTURE_SCENE_MODE_ACTION = "cxui_action_scenemodes";
@@ -82,9 +85,12 @@
static const char *STILL_PRE_CAPTURE_GOTO_VIDEO_ACTION = "cxui_action_goto_video";
static const char *STILL_PRE_CAPTURE_IMAGES_LEFT_LABEL = "images_remaining";
static const char *STILL_PRE_CAPTURE_QUALITY_ICON = "quality_indicator";
+ static const char *STILL_PRE_CAPTURE_FACE_TRACKING_ICON = "face_tracking_indicator";
static const char *STILL_PRE_CAPTURE_POST_CAPTURE_ACTION = "cxui_action_stillpostcapture";
static const char *STILL_PRE_CAPTURE_INDICATOR_CONTAINER = "indicatorContainer";
static const char *STILL_PRE_CAPTURE_IMAGES_LEFT_CONTAINER = "images_left_container";
+ static const char *STILL_PRE_CAPTURE_GEOTAGGING_INDICATOR_ICON = "still_geotagging_indicator";
+ static const char *STILL_PRE_CAPTURE_FLASHBLINK_INDICATOR_ICON = "flash_indicator";
static const char *STILL_PRE_CAPTURE_SELFTIMER_CONTAINER = "still_precapture_selftimer_container";
static const char *STILL_PRE_CAPTURE_SELFTIMER_COUNTER = "still_selftimer_counter";
@@ -92,15 +98,14 @@
static const char *STILL_PRE_CAPTURE_SELFTIMER_CANCEL_BUTTON = "still_selftimer_cancel_button";
static const char *VIDEO_PRE_CAPTURE_VIEW = "video_capture_view";
-
+
static const char *SETTINGS_DIALOG_OK_ACTION = "action_ok";
-
+
// video
// In order to be able to refer to a widget, we need to know its object name.
static const char *VIDEO_PRE_CAPTURE_TOOLBAR = "video_toolbar";
static const char *VIDEO_PRE_CAPTURE_TOOLBAR_REC = "video_toolbar_recording";
static const char *VIDEO_PRE_CAPTURE_TOOLBAR_PAUSED = "video_toolbar_paused";
- static const char *VIDEO_PRE_CAPTURE_FLASH_ACTION = "cxui_video_action_light";
static const char *VIDEO_PRE_CAPTURE_VIEWFINDER = "video_viewfinder_widget";
static const char *VIDEO_PRE_CAPTURE_ZOOM_SLIDER = "video_zoom";
static const char *VIDEO_PRE_CAPTURE_RECORDING_ICON = "video_recording_icon";
@@ -112,13 +117,22 @@
static const char *VIDEO_PRE_CAPTURE_POST_CAPTURE_ACTION = "cxui_video_action_showcapturedvideo";
static const char *VIDEO_PRE_CAPTURE_INDICATOR_CONTAINER_TOP = "video_indicator_container_top";
static const char *VIDEO_PRE_CAPTURE_INDICATOR_CONTAINER_BOTTOM = "video_indicator_container_bottom";
+ static const char *VIDEO_PRE_CAPTURE_SCENE_MODE_ACTION = "cxui_video_action_scene";
static const char *VIDEO_PRE_CAPTURE_QUALITY_ICON = "video_quality_indicator";
+ static const char *VIDEO_PRE_CAPTURE_GEOTAGGING_INDICATOR_ICON = "video_geotagging_indicator";
+ static const char *VIDEO_PRE_CAPTURE_VIDEOAUDIOMUTE_INDICATOR_ICON = "video_audio_mute_indicator";
+ static const char *VIDEO_PRE_CAPTURE_STABILITY_INDICATOR_ICON = "video_stability_indicator";
// standby
static const char *STANDBY_POPUP = "standbymode_popup";
static const char *STANDBY_TEXT_WIDGET = "standby_text";
+ // Full screen popup
+ static const char *FULL_SCREEN_POPUP = "full_screen_popup";
+ static const char *FULL_SCREEN_POPUP_TEXT = "full_screen_popup_text";
+ static const char *FULL_SCREEN_POPUP_BUTTON = "full_screen_popup_button";
+
// error manager
static const char *ERROR_POPUP = "errornote_popup";
static const char *ERROR_TEXT_WIDGET = "errornote_text";
@@ -142,13 +156,15 @@
static const char *SETTINGS_SLIDER_DIALOG_HEADING_WIDGET = "slider_settings_dialog_heading";
static const char *SETTINGS_SLIDER_DIALOG_CONTENT_WIDGET = "settings_dialog_slider";
- // scene setting
- static const char *SCENE_VIEW_CONTAINER = "scene_view_container";
- static const char *SCENE_VIEW_BG_IMAGE = "scene_view_bg_icon";
- static const char *SCENE_VIEW_BG_IMAGE2 = "scene_view_bg_icon2";
- static const char *SCENE_VIEW_RADIOBUTTONS = "scene_view_radioButtonList";
- static const char *SCENE_VIEW_OK_BUTTON = "scene_ok_button";
- static const char *SCENE_VIEW_CANCEL_BUTTON = "scene_cancel_button";
+ // scene mode view
+ static const char *SCENE_MODE_VIEW = "settings_scenes_view";
+ static const char *SCENE_MODE_VIEW_CONTAINER = "scene_view_container";
+ static const char *SCENE_MODE_VIEW_BG_IMAGE = "scene_view_bg_icon";
+ static const char *SCENE_MODE_VIEW_BG_IMAGE2 = "scene_view_bg_icon2";
+ static const char *SCENE_MODE_VIEW_RADIOBUTTONS = "scene_view_radioButtonList";
+ static const char *SCENE_MODE_VIEW_OK_BUTTON = "scene_ok_button";
+ static const char *SCENE_MODE_VIEW_CANCEL_BUTTON = "scene_cancel_button";
+ static const char *SCENE_MODE_VIEW_HEADING_WIDGET = "scene_title";
}
namespace CxUiInternal
@@ -160,6 +176,15 @@
static const char *PROPERTY_KEY_TRUE = "1";
}
+namespace CxuiActivityIds
+{
+ static const QString STILL_PRECAPTURE_ACTIVITY = "CameraViewfinderShow";
+ static const QString STILL_POSTCAPTURE_ACTIVITY = "CameraPostCaptureShow";
+
+ static const QString VIDEO_PRECAPTURE_ACTIVITY = "CamcorderViewfinderShow";
+ static const QString VIDEO_POSTCAPTURE_ACTIVITY = "CamcorderPostCaptureShow";
+}
+
Q_DECLARE_METATYPE(CxUi::CameraView)
#endif // CXUIENUMS_H
--- a/camerauis/cameraxui/cxui/inc/cxuierrormanager.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/inc/cxuierrormanager.h Thu Jul 15 01:55:05 2010 +0300
@@ -20,9 +20,9 @@
#include <QObject>
#include "cxeerror.h"
+class HbAction;
class HbDialog;
class CxuiDocumentLoader;
-class CxuiCaptureKeyHandler;
/*
@@ -34,18 +34,21 @@
public:
- CxuiErrorManager(CxuiCaptureKeyHandler &keyHandler,CxuiDocumentLoader *documentLoader);
+ CxuiErrorManager(CxuiDocumentLoader *documentLoader);
~CxuiErrorManager();
signals:
- void aboutToRecoverError();
- void errorRecovered();
+ void errorPopupShown();
+ void errorPopupClosed();
+
+public slots:
+
+ void check(CxeError::Id error);
+ void clear();
private slots:
-
- void analyze(CxeError::Id error);
- void aboutToClosePopup();
+ void popupClosed(HbAction *action);
void closeApp();
private:
@@ -54,22 +57,21 @@
enum ErrorSeverity
{
None = 0,
- Warning, // Low severity, just warning user needed
- Severe, // when error cannot be recovered
- Critical // when error can be recovered, but needs actions e.g. camera in use
+ Warning,
+ Error
};
- void launchPopup(QString& errorMsgTxt);
- void showHighSeverityNote(QString& errorMsgTxt);
- void showLowSeverityNote(QString& errorMsgTxt);
- QString getErrorDetails(CxeError::Id error);
+ void launchPopup(const QString &errorText, const QString &buttonText);
+ void showErrorPopup(const QString &errorText, const QString &buttonText);
+ void showWarningPopup(const QString &errorText);
+ void getErrorDetails(QString &errorText, QString &buttonText);
private:
//data
- CxuiCaptureKeyHandler &mKeyHandler;
CxuiDocumentLoader *mDocumentLoader; // not own
HbDialog* mErrorMsgPopup;
+ CxeError::Id mErrorId;
CxuiErrorManager::ErrorSeverity mErrorSeverity;
};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxui/inc/cxuieventlog.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef CXUIEVENTLOG_H
+#define CXUIEVENTLOG_H
+
+#include <QString>
+#include <QTime>
+#include <QLinkedList>
+
+/*!
+* Class for saving events in run-time to be printed / traced out later.
+* Useful when tracing is not possible when the events occur, but can be done later.
+*/
+class CxuiEventLog
+{
+public:
+ CxuiEventLog(const QString &name, int size = 10);
+ ~CxuiEventLog();
+
+ void append(const QString &type, const QString &value);
+ void print() const;
+
+private:
+ struct CxuiEvent
+ {
+ public:
+ CxuiEvent(const QString &type, const QString &value);
+
+ QTime mTime;
+ QString mType;
+ QString mValue;
+ };
+
+ QLinkedList<CxuiEvent> mEvents;
+ int mSize;
+ QString mName;
+};
+
+#endif // CXUIEVENTLOG_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxui/inc/cxuifullscreenpopup.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef CXUFULLSCREENPOPUP_H
+#define CXUFULLSCREENPOPUP_H
+
+
+#include <HbWidget>
+#include <HbDocumentLoader>
+
+class QString;
+class QGraphicsScene;
+
+/*!
+* Class for showing simple full screen popups.
+*/
+class CxuiFullScreenPopup : public HbWidget
+{
+ Q_OBJECT
+
+public:
+ static CxuiFullScreenPopup *create(QGraphicsScene *scene,
+ const QString &message,
+ const QString &action = QString());
+ ~CxuiFullScreenPopup();
+
+ void handleMousePress();
+ void handleMouseRelease();
+
+public slots:
+ void show();
+ void hide();
+
+private:
+ qreal topZValue() const;
+ void setScene(QGraphicsScene *scene);
+
+private:
+ CxuiFullScreenPopup();
+
+ /*!
+ * Internal custom DocML loader.
+ */
+ class CxuiFullScreenPopupLoader : public HbDocumentLoader
+ {
+ public:
+ CxuiFullScreenPopupLoader();
+ QObject *createObject(const QString& type, const QString &name);
+ };
+
+private:
+ QGraphicsScene *mScene;
+ bool mPopupShown;
+
+ Q_DISABLE_COPY(CxuiFullScreenPopup)
+};
+
+#endif // CXUFULLSCREENPOPUP_H
--- a/camerauis/cameraxui/cxui/inc/cxuipostcaptureview.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/inc/cxuipostcaptureview.h Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -20,42 +20,50 @@
#include <QObject>
#include <QList>
#include <QTimer>
-#include <hbview.h>
#include <xqappmgr.h>
+#include "cxuiview.h"
class QGraphicsRectItem;
class HbMainWindow;
class HbAction;
class HbLabel;
+class ShareUi;
class CxeEngine;
class CxuiDocumentLoader;
-
+class ThumbnailManager;
/**
* Post-capture view
*/
-class CxuiPostcaptureView : public HbView
+class CxuiPostcaptureView : public CxuiView
{
Q_OBJECT
public:
CxuiPostcaptureView(QGraphicsItem *parent = 0);
virtual ~CxuiPostcaptureView();
- void construct(HbMainWindow *mainwindow, CxeEngine *engine, CxuiDocumentLoader *documentLoader);
+ void construct(HbMainWindow *mainwindow, CxeEngine *engine,
+ CxuiDocumentLoader *documentLoader, CxuiCaptureKeyHandler *keyHandler,
+ HbActivityManager *activityManager);
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+ void restoreActivity(const QString &activityId, const QVariant &data);
+ void saveActivity();
+ void clearActivity();
+
signals:
void changeToPrecaptureView();
public slots:
+ void enterStandby();
+ void exitStandby();
void handleCaptureKeyPressed();
void handleAutofocusKeyPressed();
protected:
bool eventFilter(QObject *object, QEvent *event);
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
void showEvent(QShowEvent *event);
void hideEvent(QHideEvent *event);
void showToolbar();
@@ -66,42 +74,35 @@
protected slots:
void goToPrecaptureView();
void stopViewfinder();
- void releaseCamera();
- // Control visibility
- void hideControls();
- void showControls();
- void toggleControls();
+ void hideToolbar();
// toolbar actions
- void launchPhotosApp();
void select();
void launchShare();
void playVideo();
void showDeleteNote();
- void launchVideosApp();
- void handleDeleteDialogClosed(HbAction *action);
+ void handleDeleteDialogClosed(int action);
private:
- void launchNotSupportedNotification();
QString getCurrentFilename();
+ void startTimers();
+ void startPostcaptureTimer();
+ void startReleaseTimers();
+
private slots:
- void startTimers();
- void handleFocusLost();
+ void handleThumbnailReady(QPixmap thumbnail, void *clientData, int id, int errorCode);
private: // data
- HbMainWindow *mMainWindow; // not own
- CxeEngine *mEngine; // not own
- CxuiDocumentLoader *mDocumentLoader; // not own
HbToolBar *mStillToolbar;
HbToolBar *mVideoToolbar;
HbToolBar *mEmbeddedToolbar;
QGraphicsRectItem *mBackgroundItem;
HbLabel *mImageLabel;
- QTimer mHideControlsTimeout;
+ ShareUi *mShareUi;
/**
* Timer used to stop viewfinder after a delay if the user remains in
@@ -125,12 +126,15 @@
*/
QTimer mPostcaptureTimer;
- bool mControlsVisible;
+ bool mTimersStarted;
- bool mTimersStarted;
-
XQApplicationManager mAppManager;
+ bool mDeleteNoteOpen;
+
+ QString mFilename;
+
+ ThumbnailManager *mThumbnailManager;
};
#endif // CXUIPOSTCAPTUREVIEW_H
--- a/camerauis/cameraxui/cxui/inc/cxuiprecaptureview.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/inc/cxuiprecaptureview.h Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -25,8 +25,10 @@
#include <hbframedrawer.h>
#include "cxezoomcontrol.h"
+#include "cxegeotaggingtrail.h"
#include "cxeviewfindercontrol.h"
#include "cxuidisplaypropertyhandler.h"
+#include "cxuiview.h"
class HbAction;
@@ -46,11 +48,13 @@
class HbToolBarExtension;
class HbWidget;
class CxuiZoomSlider;
+class CxuiFullScreenPopup;
+
/**
* Pre-capture view
*/
-class CxuiPrecaptureView : public HbView
+class CxuiPrecaptureView : public CxuiView
{
Q_OBJECT
@@ -61,96 +65,26 @@
public:
- /**
- * Construct-method handles initialisation tasks for this class.
- * @param mainwindow
- * @param engine
- * @param documentLoader
- * @param keyHandler
- */
- virtual void construct(HbMainWindow *mainWindow, CxeEngine *engine,
+ virtual void construct(HbMainWindow *mainWindow,
+ CxeEngine *engine,
CxuiDocumentLoader *documentLoader,
- CxuiCaptureKeyHandler *keyHandler);
-
- /**
- * Loads widgets that are not part of the default section in layouts xml.
- * Widgets are created at the time they are first loaded.
- */
- virtual void loadWidgets() = 0;
- void prepareWindow();
- virtual void updateOrientation(Qt::Orientation orient) = 0;
-
-public slots:
-
- void releaseCamera();
- void initCamera();
- void requestCameraSwitch();
-
- // whenever a setting is changed on the engine side, an icon might need updating
- // connects to the settingValueChanged signal of CxeSettings
- virtual void handleSettingValueChanged(const QString& key, QVariant newValue);
-
-protected slots:
-
- // Key events
- virtual void handleAutofocusKeyPressed();
-
- // Camera / Engine
- void handleEngineZoomStateChange(CxeZoomControl::State newState, CxeError::Id error);
- void handleZoomLevelChange(int);
- void handleVfStateChanged(CxeViewfinderControl::State newState, CxeError::Id error);
- virtual void handleFocusGained();
- virtual void handleFocusLost() = 0;
- // UI: Zoom slider change notification
- void zoomTo(int value);
+ CxuiCaptureKeyHandler *keyHandler,
+ HbActivityManager *activityManager);
- // Control visibility of all UI items at the same time: toolbar, zoom and titlepane items
- virtual void hideControls();
- virtual void showControls();
- void toggleControls();
-
- void disableControlsTimeout();
-
- void toggleZoom();
- void hideToolbar();
-
- void launchPhotosApp();
- void launchVideosApp();
-
- // Settings related
- void launchNotSupportedNotification();
- void launchDiskFullNotification();
- void showSettingsGrid();
- void hideSettingsGrid();
- void launchSliderSetting();
- void prepareToShowDialog(HbAction *action);
- void prepareToCloseDialog(HbAction *action);
-
-protected:
-
- virtual void initializeSettingsGrid() = 0;
-
- void hideZoom();
- void showZoom();
- void hideIndicators();
- void showIndicators();
- void showEvent(QShowEvent *event);
- void hideEvent(QHideEvent *event);
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
- virtual void showToolbar();
- bool eventFilter(QObject *object, QEvent *event);
- void launchSettingsDialog(QObject *action);
- bool isPostcaptureOn() const;
- void addIncreaseDecreaseButtons(CxuiZoomSlider *slider);
- QString getSettingItemIcon(const QString &key, QVariant value);
- void updateQualityIcon();
- void createWidgetBackgroundGraphic(HbWidget *widget,
- const QString &graphicName,
- HbFrameDrawer::FrameType frameType =
- HbFrameDrawer::NinePieces);
+ virtual bool isStandbyModeSupported() const;
+ /**
+ * Loads widgets that are not part of the default section in layouts xml.
+ * Widgets are created at the time they are first loaded.
+ */
+ virtual void loadWidgets() = 0;
signals:
+ /*!
+ * Signal that view is ready to be used.
+ */
+ void viewReady();
+
// signals to switch to post/pre-capture view.
void changeToPostcaptureView();
void changeToPrecaptureView();
@@ -163,32 +97,80 @@
void stopStandbyTimer();
// signal to report error to ErrorManager for further actions.
- void reportError(CxeError::Id errorId);
- void showScenesView();
+ void errorEncountered(CxeError::Id id);
+
+public slots:
+
+ void initCamera();
+ void requestCameraSwitch();
+
+ // whenever a setting is changed on the engine side, an icon might need updating
+ // connects to the settingValueChanged signal of CxeSettings
+ virtual void handleSettingValueChanged(const QString& key, QVariant newValue);
+
+ // From CxuiView
+ virtual void enterStandby();
+ virtual void exitStandby();
+
+protected slots:
+
+ // Key events
+ virtual void handleAutofocusKeyPressed();
+
+ // Camera / Engine
+ void handleEngineZoomStateChange(CxeZoomControl::State newState, CxeError::Id error);
+ void handleZoomLevelChange(int);
+ void handleVfStateChanged(CxeViewfinderControl::State newState, CxeError::Id error);
+ // UI: Zoom slider change notification
+ void zoomTo(int value);
+
+ void disableControlsTimeout();
+
+ void toggleZoom();
+
+ // Settings related
+ void showSettingsGrid();
+ void hideSettingsGrid();
+ void launchSliderSetting();
+ void prepareToShowDialog(HbAction *action);
+ void prepareToCloseDialog(HbAction *action);
+ void updateLocationIndicator(CxeGeoTaggingTrail::State newState, CxeError::Id error);
+
+private slots:
+ void disableGeotaggingDisclaimer();
+ void launchGeoTaggingSetting();
protected:
- CxeEngine *mEngine; // not own
- HbTransparentWindow *mViewfinder; // not own, owned by the graphics scene
- HbMainWindow *mMainWindow; // not own
- CxuiDocumentLoader *mDocumentLoader; // not own
- CxuiDisplayPropertyHandler *mDisplayHandler;
- bool mControlsVisible;
- QTimer mHideControlsTimeout;
- CxuiZoomSlider *mSlider; // zoom slider, not own, owned by the graphics scene
- HbToolBar *mToolBar; // not own, owned by the graphics scene
- HbToolBarExtension *mSettingsGrid;
- bool mZoomVisible;
- bool mWidgetsLoaded;
- CxuiSettingDialog *mSettingsDialog;
- CxuiSettingRadioButtonList *mSettingsDialogList;
- CxuiCaptureKeyHandler *mKeyHandler;
- HbLabel *mQualityIcon;
- HbWidget *mIndicators;
+ void toggleControls();
+ virtual void initializeSettingsGrid() = 0;
+ void showEvent(QShowEvent *event);
+ void hideEvent(QHideEvent *event);
+ bool eventFilter(QObject *object, QEvent *event);
+ void launchSettingsDialog(QObject *action);
+ virtual bool isPostcaptureOn() const = 0;
+ void addIncreaseDecreaseButtons(CxuiZoomSlider *slider);
+ QString getSettingItemIcon(const QString &key, QVariant value);
+ virtual void updateQualityIcon() = 0;
+ virtual void updateSceneIcon(const QString& sceneId) = 0;
+ void launchGeoTaggingDisclaimerDialog();
private:
CxuiSettingDialog* createSettingsDialog();
CxuiSettingDialog* createSliderSettingsDialog();
QPointF getDialogPosition();
+
+protected:
+ HbTransparentWindow *mViewfinder; // not own, owned by the graphics scene
+ CxuiDisplayPropertyHandler *mDisplayHandler;
+ HbToolBarExtension *mSettingsGrid;
+ bool mWidgetsLoaded;
+ CxuiSettingDialog *mSettingsDialog;
+ CxuiSettingRadioButtonList *mSettingsDialogList;
+ HbLabel *mQualityIcon;
+ HbLabel *mGeoTaggingIndicatorIcon;
+ HbLabel *mFaceTrackingIcon;
+ CxuiFullScreenPopup *mStandbyPopup;
+
private:
HbLabel *mSettingsDialogHeading;
@@ -197,7 +179,7 @@
CxuiSettingSlider *mSettingsSlider;
CxuiSettingsInfo *mSettingsInfo;
-
+
HbAction *mSettingsDialogOkAction;
HbAction *mSliderSettingsDialogOkAction;
};
--- a/camerauis/cameraxui/cxui/inc/cxuiscenemodeview.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/inc/cxuiscenemodeview.h Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -31,6 +31,7 @@
#include "cxuisettingsinfo.h"
#include "cxuienums.h"
#include "cxeengine.h"
+#include "cxuiview.h"
class CxuiCaptureKeyHandler;
class CxuiDocumentLoader;
@@ -45,7 +46,7 @@
*/
-class CxuiSceneModeView : public HbView
+class CxuiSceneModeView : public CxuiView
{
Q_OBJECT
@@ -59,11 +60,12 @@
void construct(HbMainWindow *mainwindow,
CxeEngine *engine,
CxuiDocumentLoader *documentLoader,
- CxuiCaptureKeyHandler *keyHandler = NULL);
+ CxuiCaptureKeyHandler *keyHandler,
+ HbActivityManager *activityManager);
void loadDefaultWidgets();
void loadBackgroundImages();
-
+ void saveActivity();
signals:
void viewCloseEvent();
@@ -76,28 +78,21 @@
void finishScenesTransition();
void handleOkButtonPress();
void handleCancelButtonPress();
- void releaseCameraHw();
protected:
void showEvent(QShowEvent *event);
+ bool allowShowControls() const;
+ bool isFeedbackEnabled() const;
private:
QString backgroundForScene(const QString& sceneId);
void startBackgroundTransition();
- void createWidgetBackgroundGraphic(HbWidget *widget,
- const QString &graphicName,
- HbFrameDrawer::FrameType frameType =
- HbFrameDrawer::NinePieces);
void connectSignals();
void closeView();
private:
- HbMainWindow *mMainWindow; //not own
CxuiSettingsInfo *mSettingsInfo;
- CxeEngine *mEngine; //not own
- CxuiDocumentLoader *mDocumentLoader; //not own
- CxuiCaptureKeyHandler *mCaptureKeyHandler;
HbLabel* mScenesBackground;
HbLabel* mScenesBackground2;
@@ -106,6 +101,7 @@
HbPushButton* mScenesOkButton;
HbPushButton* mScenesCancelButton;
HbWidget* mScenesContainer;
+ HbLabel *mScenesHeading;
QTimer mCameraReleaseTimer;
--- a/camerauis/cameraxui/cxui/inc/cxuiselftimer.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/inc/cxuiselftimer.h Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -19,6 +19,8 @@
#include <QObject>
#include <QTimer>
+#include <QSound>
+#include <QVariant>
class CxeSettings;
class CxuiDocumentLoader;
@@ -38,6 +40,7 @@
bool isEnabled();
bool isOngoing();
+ int getTimeout() const;
signals:
void timerFinished();
void cancelled();
@@ -45,17 +48,18 @@
public slots:
void changeTimeOut(int seconds);
void startTimer();
- void reset();
+ void reset(bool update = true);
void cancel();
+ void enableSound(long int uid, unsigned long int key, QVariant value);
protected slots:
void timeout();
private:
- void reset(bool update);
void updateWidgets();
void showWidgets();
void hideWidgets();
+ void playSound();
private:
Q_DISABLE_COPY(CxuiSelfTimer)
@@ -74,6 +78,8 @@
// settings, not own
CxeSettings &mSettings;
+ QSound mSound;
+ bool mUseSound;
};
#endif // CXUISELFTIMER_H
--- a/camerauis/cameraxui/cxui/inc/cxuisettingradiobuttonlist.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/inc/cxuisettingradiobuttonlist.h Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -43,7 +43,7 @@
explicit CxuiSettingRadioButtonList(QGraphicsItem *parent, CxeEngine *engine);
void init(CxUiSettings::RadioButtonListParams *data);
-
+ void setOriginalSelectedItemByValue(const QVariant &value);
signals:
void valueSelected(int value);
void selectionCommitted();
@@ -55,10 +55,6 @@
protected slots:
void handleItemSelected(int index);
-protected:
- void showEvent(QShowEvent *event); // From QGraphicsWidget
- virtual void initOriginalSelectedItem();
-
private:
// helper methods
void setSettingId(const QString &id);
--- a/camerauis/cameraxui/cxui/inc/cxuisettingsinfo.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/inc/cxuisettingsinfo.h Thu Jul 15 01:55:05 2010 +0300
@@ -18,6 +18,11 @@
#ifndef CXUISETTINGSINFO_H
#define CXUISETTINGSINFO_H
+/*!
+* @file
+* @brief CxUi settings related classes and constants.
+*/
+
#include <QObject>
#include <QMap>
#include <QPair>
@@ -31,12 +36,23 @@
class CxeEngine;
class CxuiSettingXmlReader;
+/*!
+* @namespace CxUiSettings
+* @brief Namespace for UI settings related constants and classes.
+*/
namespace CxUiSettings
{
- // Setting mappings
+ /*! Image setting definitions. */
static const char *IMAGE_SETTING_MAPPING_FILE = ":/xml/image_setting.xml";
+ /*! Video setting definitions. */
static const char *VIDEO_SETTING_MAPPING_FILE = ":/xml/video_setting.xml";
+ /*!
+ * Character used to separate lines within a single string.
+ * E.g. SettingItem::mItem can be split with this character to get multi-line item.
+ */
+ static const char NEW_LINE_CHAR = '\n';
+
struct SettingItem
{
QString mItem;
@@ -98,10 +114,11 @@
void getVideoQualitySettings(CxUiSettings::RadioButtonListParams &settings);
void handleQualitySettings(const QString &key, CxUiSettings::RadioButtonListParams &settings);
-private slots:
- void initForCurrentMode(CxeError::Id status);
+private:
+ void checkMode();
private: // data members
+ int mMode;
CxeEngine *mEngine;
CxuiSettingXmlReader *mXmlReader;
};
--- a/camerauis/cameraxui/cxui/inc/cxuistandby.h Thu May 13 21:30:19 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
-* 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:
-*
-*/
-#ifndef CXUISTANDBY_H
-#define CXUISTANDBY_H
-
-#include <QObject>
-
-// constants
-
-const int CXUI_STANDBY_CAMERA_TIMEOUT = 60000; // 60 seconds
-
-// forward declaration
-class HbDialog;
-class QTimer;
-class CxeEngine;
-class CxuiDocumentLoader;
-class CxuiCaptureKeyHandler;
-
-
-/*
-* class CxuiStandby continuously monitors for releasing camera when there are no user actions
-* for a specific time period. Timer is used to release the camera HW and switching to stanby mode
-* after a delay.Releasing the camera improves power efficiency, but creates additional latency
-* when returning to pre-capture view.
-*/
-class CxuiStandby : public QObject
-{
- Q_OBJECT
-
-public:
- CxuiStandby(CxuiCaptureKeyHandler &keyHandler, CxuiDocumentLoader *documentLoader, CxeEngine *engine);
- ~CxuiStandby();
-
-signals:
-
- /*
- * signal to prepare for standby
- */
- void aboutToEnterStandby();
-
- /*
- * signal to prepare UI for exiting standby
- */
- void aboutToExitStandby();
-
-public slots:
-
- /*
- * starts standby timer
- */
- void startTimer();
-
- /*
- * stops standby timer
- */
- void stopTimer();
-
- /*
- * handles focus gain event
- */
- bool handleMouseEvent();
-
-private slots:
-
- void dismissStandby();
- void toStandby();
-
-private: // helper methods
-
- bool proceedToStandy();
- bool eventFilter(QObject *object, QEvent *event);
-
-private:
-
- CxuiCaptureKeyHandler &mKeyHandler;
- CxuiDocumentLoader *mDocumentLoader; // not own
- CxeEngine *mEngine; // not own
- HbDialog *mStandbyPopup;
- QTimer *mStandbyTimer;
- bool mStandbyDialogVisible;
-};
-
-#endif // CXUISTANDBY_H
--- a/camerauis/cameraxui/cxui/inc/cxuistillprecaptureview.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/inc/cxuistillprecaptureview.h Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -37,11 +37,10 @@
class CxuiSelfTimerRadioButtonList;
class HbToolBarExtension;
class HbWidget;
+
/**
* Pre-capture view for still image mode
*/
-
-
class CxuiStillPrecaptureView : public CxuiPrecaptureView
{
Q_OBJECT
@@ -53,34 +52,23 @@
public:
- /**
- * Construct-method handles initialisation tasks for this class. Needs to be called
- * before the instance of this class is used.
- * @param mainwindow
- * @param engine
- * @param documentLoader
- * @param keyHandler
- */
- virtual void construct(HbMainWindow *mainwindow, CxeEngine *engine,
- CxuiDocumentLoader *documentLoader, CxuiCaptureKeyHandler *keyHandler = NULL);
+ virtual void construct(HbMainWindow *mainwindow,
+ CxeEngine *engine,
+ CxuiDocumentLoader *documentLoader,
+ CxuiCaptureKeyHandler *keyHandler,
+ HbActivityManager *activityManager);
- /**
- * Loads default widgets in layouts xml.
- */
virtual void loadDefaultWidgets();
-
- /**
- * Loads widgets that are not part of the default section in layouts xml.
- * Widgets are created at the time they are first loaded.
- */
virtual void loadWidgets();
- void updateOrientation(Qt::Orientation orientation);
+ void restoreActivity(const QString &activityId, const QVariant &data);
+ void saveActivity();
+ void clearActivity();
protected:
void showEvent(QShowEvent *event);
- virtual void showToolbar();
+ virtual bool allowShowControls() const;
public slots:
@@ -91,14 +79,15 @@
// connects to the sceneChanged signal of CxeSettings
void handleSceneChanged(CxeScene &scene);
+ // From CxuiPrecaptureView
+ virtual void enterStandby();
+
protected slots:
void focusAndCapture();
void capture();
void setCapturePending();
void goToVideo();
- void launchSceneModesPopup();
-
// Key events
void handleCaptureKeyPressed();
void handleAutofocusKeyPressed();
@@ -110,27 +99,21 @@
void handleStillCaptureStateChanged(CxeStillCaptureControl::State newState, CxeError::Id error);
void handleSnapshot(CxeError::Id error);
- /**
- * Signal used to reset mCapturePending after a short timeout. If the image
- * cannot be captured within a given time of the key press, it is better to cancel
- * the whole operation.
- */
void resetCapturePendingFlag();
- void showControls();
-
- /**
- * Application focus slots are called if focus state is changed.
- * Camera is released or reserved according to new state.
- */
- void handleFocusLost();
- void handleFocusGained();
void launchSetting();
void updateImagesLeftLabel();
protected:
void initializeSettingsGrid();
+ bool isPostcaptureOn() const;
+ void updateSceneIcon(const QString& sceneId);
+ void updateQualityIcon();
void closeDialogs();
+ void updateFaceTrackingIcon();
+
+private:
+ void reloadIndicatorWidgets();
protected:
CxuiSelfTimer *mSelfTimer;
--- a/camerauis/cameraxui/cxui/inc/cxuivideoprecaptureview.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/inc/cxuivideoprecaptureview.h Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -45,35 +45,25 @@
public:
- /**
- * Construct-method handles initialisation tasks for this class.
- * @param mainwindow
- * @param engine
- * @param documentLoader
- * @param keyHandler
- */
void construct(HbMainWindow *mainwindow, CxeEngine *engine,
CxuiDocumentLoader *documentLoader,
- CxuiCaptureKeyHandler *keyHandler = NULL);
+ CxuiCaptureKeyHandler *keyHandler,
+ HbActivityManager *activityManager);
- /**
- * Loads widgets that are needed right from the start.
- */
virtual void loadDefaultWidgets();
- /**
- * Loads widgets that are not part of the default section in layouts xml.
- * Widgets are created at the time they are first loaded.
- */
virtual void loadWidgets();
- void updateOrientation(Qt::Orientation orientation);
+ void restoreActivity(const QString &activityId, const QVariant &data);
+ void saveActivity();
+ void clearActivity();
public slots:
// from CxuiPrecaptureView
virtual void handleSettingValueChanged(const QString& key, QVariant newValue);
+ void handleSceneChanged(CxeScene &scene);
void handleQuitClicked();
protected slots:
@@ -82,28 +72,13 @@
void record();
void pause();
void stop();
- void stopAndPrepareNewVideo();
void goToStill();
void showEvent(QShowEvent *event);
void handleVideoStateChanged(CxeVideoCaptureControl::State newState, CxeError::Id error);
void handleCaptureKeyPressed();
void prepareNewVideo(CxeError::Id error = CxeError::None);
- void toggleLight();
void launchVideoScenePopup();
void launchSetting();
-
- /**
- * Application focus slots are called if focus state is changed.
- * Recording is stopped and camera released or reserved according to new state.
- */
- void handleFocusLost();
-
- /**
- * Battery almost empty warning signal.
- * Need to stop ongoing recording.
- */
- void handleBatteryEmpty();
-
void updateTimeLabels();
// from CxuiPrecaptureView
@@ -114,15 +89,24 @@
void setVideoTime(HbLabel* label, int time);
bool getElapsedTime();
void getRemainingTime();
- virtual void showToolbar();
+ bool allowShowControls() const;
+ bool isFeedbackEnabled() const;
+ void showToolbar();
void disableFeedback();
void enableFeedback();
void initializeSettingsGrid();
+ bool isPostcaptureOn() const;
+ void updateSceneIcon(const QString& sceneId);
+ void updateQualityIcon();
void setRecordingItemsVisibility(bool visible);
// from QObject
bool eventFilter(QObject *object, QEvent *event);
+
+private:
+ void reloadIndicatorWidgets();
+
protected:
QTimer mElapsedTimer;
int mTimeElapsed;
@@ -132,9 +116,9 @@
HbLabel *mRemainingTimeText; // not own
HbLabel *mRecordingIcon; // not own
HbAction *mGoToStillAction; // not own
- HbToolBar *mToolBarIdle; // not own
- HbToolBar *mToolBarRec; // not own
- HbToolBar *mToolBarPaused; // not own
+ HbToolBar *mToolbarIdle; // not own
+ HbToolBar *mToolbarRec; // not own
+ HbToolBar *mToolbarPaused; // not own
HbDialog *mVideoScenePopup;
CxeVideoCaptureControl *mVideoCaptureControl;
HbMenu *mMenu; // own
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxui/inc/cxuiview.h Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2010 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: This is a header file for a CxuiView class
+*
+*/
+
+#ifndef CXUIVIEW_H
+#define CXUIVIEW_H
+
+#include <QObject>
+#include <QTimer>
+#include <hbview.h>
+#include <hbmainwindow.h>
+#include <hbframedrawer.h>
+#include <hbinstantfeedback.h>
+
+class CxuiDocumentLoader;
+class CxuiCaptureKeyHandler;
+class CxuiZoomSlider;
+class CxuiCaptureKeyHandler;
+class CxeEngine;
+class HbWidget;
+class HbActivityManager;
+
+// CONSTANTS
+const int CXUI_HIDE_CONTROLS_TIMEOUT = 6000; // 6 seconds
+
+/**
+ * A base class for all views in the Camera UI
+ * The class is for deriving only
+ */
+class CxuiView : public HbView
+{
+ Q_OBJECT
+
+public:
+ CxuiView(QGraphicsItem *parent = 0);
+ virtual ~CxuiView();
+
+ virtual void construct(HbMainWindow *mainWindow, CxeEngine *engine,
+ CxuiDocumentLoader *documentLoader,
+ CxuiCaptureKeyHandler * keyHandler,
+ HbActivityManager *activityManager);
+
+public:
+ virtual bool isStandbyModeSupported() const;
+ virtual void updateOrientation(Qt::Orientation orientation);
+
+ virtual void restoreActivity(const QString &activityId, const QVariant &data);
+ virtual void saveActivity();
+ virtual void clearActivity();
+
+protected:
+ virtual bool allowShowControls() const;
+ virtual bool isFeedbackEnabled() const;
+ virtual void toggleControls();
+ virtual void showToolbar();
+ virtual void hideZoom();
+ virtual void showZoom();
+ virtual void hideIndicators();
+ virtual void showIndicators();
+ virtual void createWidgetBackgroundGraphic(HbWidget *widget,
+ const QString &graphicName,
+ HbFrameDrawer::FrameType frameType =
+ HbFrameDrawer::NinePieces);
+
+ void mousePressEvent(QGraphicsSceneMouseEvent *event);
+ void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+
+public slots:
+ virtual void enterStandby();
+ virtual void exitStandby();
+
+protected slots:
+ virtual void launchNotSupportedNotification();
+ virtual void launchPhotosApp();
+ virtual void launchVideosApp();
+ virtual void releaseCamera();
+
+ virtual void launchScenesView();
+
+ // Control visibility of all UI items at the same time: toolbar, zoom and titlepane items
+ virtual void hideControls();
+ virtual void showControls();
+
+ virtual void hideToolbar();
+
+
+signals:
+ void viewCloseEvent();
+ void showScenesView();
+
+protected: //common data
+ HbMainWindow *mMainWindow; // not own
+ CxeEngine *mEngine; // not own
+ CxuiDocumentLoader *mDocumentLoader; // not own
+ CxuiCaptureKeyHandler* mCaptureKeyHandler;
+
+ CxuiZoomSlider *mSlider; // zoom slider, not own, owned by the graphics scene
+ HbToolBar *mToolbar; // not own, owned by the graphics scene
+ HbWidget *mIndicators;
+
+ bool mControlsVisible;
+ bool mZoomVisible;
+ QTimer mHideControlsTimeout;
+
+ HbInstantFeedback mControlsFeedback;
+ HbActivityManager *mActivityManager;
+};
+
+#endif // CXUIVIEW_H
--- a/camerauis/cameraxui/cxui/inc/cxuiviewmanager.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/inc/cxuiviewmanager.h Thu Jul 15 01:55:05 2010 +0300
@@ -24,22 +24,17 @@
#include "cxeviewfindercontrol.h"
#include "cxenamespace.h"
#include "cxeerror.h"
-#include "cxuiapplicationframeworkmonitor.h"
-
+#include "cxuiapplicationstate.h"
class QGraphicsSceneMouseEvent;
class HbMainWindow;
class CxuiApplication;
class CxuiCaptureKeyHandler;
class CxuiPrecaptureView;
-class CxuiStillPrecaptureView;
-class CxuiVideoPrecaptureView;
-class CxuiPostcaptureView;
class CxeEngine;
class CxuiDocumentLoader;
-class CxuiErrorManager; // class that handles all errors in ui.
-class CxuiStandby;
-class CxuiSceneModeView;
+class CxuiErrorManager;
+class CxuiView;
class CxuiViewManager : public QObject
{
@@ -49,83 +44,57 @@
CxuiViewManager(CxuiApplication &application, HbMainWindow &mainWindow, CxeEngine &engine);
~CxuiViewManager();
- void prepareWindow();
-
- /**
- * Get a pointer to the document loader instance.
- */
- CxuiDocumentLoader* documentLoader();
-
public slots:
void changeToPostcaptureView();
void changeToPrecaptureView();
void switchCamera();
- void createPostcaptureView();
void showScenesView();
private slots:
void toForeground();
- void handleForegroundStateChanged(CxuiApplicationFrameworkMonitor::ForegroundState state);
- void handleBatteryEmpty();
- void aboutToLooseFocus();
- void aboutToGainFocus();
+ void handleApplicationStateChanged(CxuiApplicationState::State newState,
+ CxuiApplicationState::State oldState);
+ void startStandbyTimer();
+ void stopStandbyTimer();
signals:
- void focusGained();
- void focusLost();
- void batteryEmpty();
- void disableStandbyTimer();
- void startStandbyTimer();
+ void normalStateEntered();
+ void normalStateExited();
+ void standbyExitRequested();
protected:
bool eventFilter(QObject *object, QEvent *event);
private:
- void createStillPrecaptureView();
- void createVideoPrecaptureView();
+ CxuiView *currentView() const;
+ void initStartupView();
+ CxuiView *createView(const QString &viewName);
CxuiPrecaptureView* getPrecaptureView(Cxe::CameraMode mode, Cxe::CameraIndex camera);
- void createSceneModesView();
-
- /*
- * connects all necessary signals for precapture view
- */
+ void connectSignals(QObject *view);
+ void disconnectSignals(QObject *view = NULL);
void connectPreCaptureSignals();
+ void connectPostCaptureSignals();
+ void connectSceneModeSignals();
+ void connectCaptureKeySignals();
- /*
- * disconnects signals
- */
- void disconnectSignals();
-
- /*
- * connects all necessary signals for postcapture view
- */
- void connectPostCaptureSignals();
-
-
- /*
- * connects capture key handler signals to the current view.
- */
- void connectCaptureKeySignals();
+ void handleExitingNormalState();
+ void clearAllActivities();
private:
//data
CxuiApplication &mApplication;
HbMainWindow &mMainWindow;
- CxuiStillPrecaptureView *mStillPrecaptureView;
- CxuiVideoPrecaptureView *mVideoPrecaptureView;
- CxuiPostcaptureView *mPostcaptureView;
+ QMap<QString, CxuiView*> mViews;
+ QMap<QString, QString> mDocmlFilesByView;
CxeEngine &mEngine;
CxuiCaptureKeyHandler *mKeyHandler;
- CxuiApplicationFrameworkMonitor *mApplicationMonitor;
-
-private:
CxuiDocumentLoader *mCameraDocumentLoader;
- CxuiStandby *mStandbyHandler;
+ CxuiApplicationState *mApplicationState;
CxuiErrorManager *mErrorManager;
- CxuiSceneModeView *mSceneModeView;
+ QTimer mStandbyTimer;
};
#endif // CXUIVIEWMANAGER_H
--- a/camerauis/cameraxui/cxui/inc/cxuizoomslider.h Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/inc/cxuizoomslider.h Thu Jul 15 01:55:05 2010 +0300
@@ -30,6 +30,9 @@
explicit CxuiZoomSlider(QGraphicsItem *parentItem = NULL);
~CxuiZoomSlider();
+public:
+ void addZoomButtons();
+
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxui/layouts/cxui.css Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,73 @@
+/*
+Mode/setting indicators in still precapture
+All HbLabel icons and text inside indicatorContainer
+*/
+HbWidget#indicatorContainer > HbLabel::icon
+{
+color: var(qtc_popup_trans_normal);
+}
+HbWidget#indicatorContainer > HbLabel::text
+{
+color: var(qtc_popup_trans_normal);
+}
+/*
+Selftimer
+All HbLabel text and icons inside still_precapture_selftimer_container
+*/
+HbWidget#still_precapture_selftimer_container > HbLabel::icon
+{
+color: var(qtc_popup_trans_normal);
+}
+HbWidget#still_precapture_selftimer_container > HbLabel::text
+{
+color: var(qtc_popup_trans_normal);
+}
+/*
+Images left
+All HbLabel text and icons inside images_left_container
+*/
+HbWidget#images_left_container > HbLabel::text
+{
+color: var(qtc_popup_trans_normal);
+}
+/*
+Mode/setting indicators
+All HbLabel icons and text inside video_indicator_container_top
+*/
+HbWidget#video_indicator_container_top > HbLabel::icon
+{
+color: var(qtc_popup_trans_normal);
+}
+HbWidget#video_indicator_container_top > HbLabel::text
+{
+color: var(qtc_popup_trans_normal);
+}
+/*
+Bottom indicators (recording icon, time elapsed & left)
+HbLabels defined separately since they should be colored differently
+*/
+/* Elapsed time is a special case, it will always be red */
+HbLabel#video_elapsed_time::text
+{
+color: red;
+}
+HbLabel#video_remaining_time::text
+{
+color: var(qtc_popup_trans_normal);
+}
+HbWidget#video_indicator_container_bottom > HbLabel::icon
+{
+color: var(qtc_popup_trans_normal);
+}
+/*
+Zoom sliders
+Decrement and increase icons both
+*/
+CxuiZoomSlider::decrement-icon
+{
+color: var(qtc_popup_trans_normal);
+}
+CxuiZoomSlider::increment-icon
+{
+color: var(qtc_popup_trans_normal);
+}
--- a/camerauis/cameraxui/cxui/layouts/errornote_popup.docml Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/layouts/errornote_popup.docml Thu Jul 15 01:55:05 2010 +0300
@@ -1,11 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
-<hbdocument version="1.0">
+<hbdocument version="1.1">
<widget name="errornote_popup" type="HbDialog">
+ <sizepolicy horizontalPolicy="Minimum" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
+ <sizehint height="360" type="MINIMUM" width="640"/>
+ <enums name="dismissPolicy" value="NoDismiss"/>
+ <bool name="backgroundFaded" value="FALSE"/>
<widget name="errornote_content_widget" role="HbDialog:contentWidget" type="HbWidget">
<widget name="errornote_text" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
<real name="z" value="0.3"/>
- <sizehint height="360" type="PREFERRED" width="640"/>
+ <sizehint height="360" type="MINIMUM" width="640"/>
<string locid="txt_cam_info_error" name="plainText" value="Unexpected error occurred. Power off the device and restart"/>
</widget>
<widget name="errornote_exit_button_widget" type="HbWidget">
@@ -24,14 +28,12 @@
<real name="z" value="0.1"/>
<layout type="anchor">
<anchoritem dst="errornote_exit_button_widget" dstEdge="BOTTOM" spacing="0" src="" srcEdge="BOTTOM"/>
- <anchoritem dst="errornote_exit_button_widget" dstEdge="LEFT" spacing="400" src="" srcEdge="LEFT"/>
+ <anchoritem dst="errornote_exit_button_widget" dstEdge="CENTERH" spacing="0un" src="" srcEdge="CENTERH"/>
</layout>
</widget>
- <size height="360" name="size" width="640"/>
- <rect height="360" name="geometry" width="640" x="0" y="0"/>
</widget>
<connect receiver="errornote_popup" sender="errornote_button_exit" signal="released()" slot="close()"/>
- <metadata activeUIState="Common ui state" display="NHD landscape" unit="un">
+ <metadata activeUIState="Common ui state" display="NHD-3.2-inch_landscape" unit="un">
<uistate name="Common ui state" sections="#common"/>
</metadata>
</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxui/layouts/full_screen_popup.docml Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.1">
+ <widget name="full_screen_popup" type="HbWidget">
+ <widget name="full_screen_popup_text" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="0.2"/>
+ <sizehint height="360" type="MINIMUM" width="640"/>
+ </widget>
+ <widget name="full_screen_popup_button" type="HbPushButton">
+ <real name="z" value="0.3"/>
+ </widget>
+ <real name="z" value="0.1"/>
+ <sizehint height="360" type="MINIMUM" width="640"/>
+ <layout type="anchor">
+ <anchoritem dst="full_screen_popup_button" dstEdge="BOTTOM" spacing="expr(-var(hb-param-margin-gene-bottom) )" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="full_screen_popup_button" dstEdge="CENTERH" spacing="0" src="" srcEdge="CENTERH"/>
+ </layout>
+ </widget>
+ <connect receiver="full_screen_popup" sender="full_screen_popup_button" signal="released()" slot="close()"/>
+ <metadata activeUIState="Common ui state" display="NHD-3.2-inch_landscape" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ </metadata>
+</hbdocument>
--- a/camerauis/cameraxui/cxui/layouts/image_setting.xml Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/layouts/image_setting.xml Thu Jul 15 01:55:05 2010 +0300
@@ -19,8 +19,8 @@
setting_icon="">
<item string="txt_cam_list_automatic_flash" value="0" icon="qtg_mono_autoflash" />
<item string="txt_cam_list_reduce_red_eye" value="1" icon="qtg_mono_redeye" />
- <item string="txt_cam_list_on_flash" value="2" icon="qtg_mono_flash" />
- <item string="txt_cam_list_off_flash" value="3" icon="qtg_mono_flash_off" />
+ <item string="txt_cam_list_flash_on" value="2" icon="qtg_mono_flash" />
+ <item string="txt_cam_list_flash_off" value="3" icon="qtg_mono_flash_off" />
</setting_list>
<!-- Still Show post-capture (setting list) -->
@@ -32,7 +32,7 @@
<lnItem string="txt_cam_list_ln_sec" lnValue="2" value="2000" icon="" />
<lnItem string="txt_cam_list_ln_sec" lnValue="10" value="10000" icon="" />
<item string="txt_cam_list_continuous" value="-1" icon="" />
- <item string="txt_cam_list_not" value="0" icon="" />
+ <item string="txt_cam_list_never" value="0" icon="" />
</setting_list>
<!-- self timer (setting list) -->
@@ -41,7 +41,7 @@
preview="0"
type="SingleLineListBox"
setting_icon="">
- <item string="txt_cam_list_off_timer" value="0" icon="" />
+ <item string="txt_cam_list_off_timer" value="-1" icon="" />
<lnItem string="txt_cam_list_ln_seconds" lnValue="2" value="2" icon="" />
<lnItem string="txt_cam_list_ln_seconds" lnValue="10" value="10" icon="" />
<lnItem string="txt_cam_list_ln_seconds" lnValue="20" value="20" icon="" />
@@ -70,7 +70,6 @@
<item string="txt_cam_list_sepia" value="1" icon="" />
<item string="txt_cam_list_white" value="3" icon="" />
<item string="txt_cam_list_vivid" value="4" icon="" />
- <item string="txt_cam_list_negative" value="2" icon="" />
</setting_list>
<!-- ISO Light sensitivity (setting list) -->
@@ -80,25 +79,35 @@
type="SingleLineListBox"
setting_icon="">
<item string="txt_cam_list_automatic_lightsens" value="0" icon="" />
- <lnItem string="txt_cam_list_iso_l1" lnValue="100" value="100" icon="" />
- <lnItem string="txt_cam_list_iso_l1" lnValue="200" value="200" icon="" />
- <lnItem string="txt_cam_list_iso_l1" lnValue="400" value="400" icon="" />
- <lnItem string="txt_cam_list_iso_l1" lnValue="800" value="800" icon="" />
+ <l1Item string="txt_cam_list_iso_l1" l1Value="100" value="100" icon="" />
+ <l1Item string="txt_cam_list_iso_l1" l1Value="200" value="200" icon="" />
+ <l1Item string="txt_cam_list_iso_l1" l1Value="400" value="400" icon="" />
+ <l1Item string="txt_cam_list_iso_l1" l1Value="800" value="800" icon="" />
+ </setting_list>
+
+ <!-- GeoTagging (setting list) -->
+ <setting_list id="geotagging"
+ heading="txt_cam_title_geotagging"
+ preview="0"
+ type="SingleLineListBox"
+ setting_icon="">
+ <item string="txt_cam_list_geotagging_on" value="1" icon="" />
+ <item string="txt_cam_list_geotagging_off" value="0" icon="" />
</setting_list>
<!-- Exposure compensation (setting slider) -->
<setting_slider id="ev_compensation_value" heading="txt_cam_title_exposure_compensation" setting_icon="">
- <setup min="txt_cam_slidervalue_l1_minus" max="txt_cam_slidervalue_l1_plus" lnValue="2" minorStep="0.5" majorStep="1"/>
+ <setup min="txt_cam_slidervalue_l1_minus" max="txt_cam_slidervalue_l1_plus" l1Value="2" minorStep="0.5" majorStep="1"/>
</setting_slider>
<!-- Contrast (setting slider) -->
<setting_slider id="contrast" heading="txt_cam_title_contrast" setting_icon="">
- <setup min="txt_cam_slidervalue_l1_minus" max="txt_cam_slidervalue_l1_plus" lnValue="2" minorStep="0.5" majorStep="1"/>
+ <setup min="txt_cam_slidervalue_l1_minus" max="txt_cam_slidervalue_l1_plus" l1Value="2" minorStep="0.5" majorStep="1"/>
</setting_slider>
<!-- Sharpness (setting slider) -->
<setting_slider id="sharpness" heading="txt_cam_title_sharpness" setting_icon="">
- <setup min="txt_cam_slidervalue_l1_minus" max="txt_cam_slidervalue_l1_plus" lnValue="2" minorStep="0.5" majorStep="1"/>
+ <setup min="txt_cam_slidervalue_l1_minus" max="txt_cam_slidervalue_l1_plus" l1Value="2" minorStep="0.5" majorStep="1"/>
</setting_slider>
<!-- Still scene modes -->
@@ -115,6 +124,16 @@
<item string="txt_cam_list_night" value="image_scene_night" icon="qtg_mono_night" />
<item string="txt_cam_list_night_portrait" value="image_scene_night_portrait" icon="qtg_mono_night_portrait" />
</setting_list>
+
+ <!-- Face tracking (setting list) -->
+ <setting_list id="face_tracking"
+ heading="txt_cam_title_facetracking"
+ preview="1"
+ type="SingleLineListBox"
+ setting_icon="">
+ <item string="txt_cam_list_facetracking_on" value="1" icon="qtg_mono_face_tracking" />
+ <item string="txt_cam_list_facetracking_off" value="0" icon="" />
+ </setting_list>
</settings>
</cxui>
\ No newline at end of file
--- a/camerauis/cameraxui/cxui/layouts/setting_scenemode.docml Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/layouts/setting_scenemode.docml Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<hbdocument version="1.0">
+<hbdocument version="1.1">
<widget name="settings_scenes_view" type="HbView">
<widget name="scene_view_content" role="HbView:widget" type="HbWidget">
<widget name="scene_view_bg_icon" type="HbLabel">
@@ -15,20 +15,17 @@
<widget name="scene_view_container" type="HbWidget">
<widget name="scene_view_radioButtonList" type="HbRadioButtonList">
<real name="z" value="4"/>
- <sizehint height="31.04478un" type="PREFERRED"/>
</widget>
<widget name="button_container" type="HbWidget">
<widget name="scene_ok_button" type="HbPushButton">
- <sizehint height="2un" type="PREFERRED"/>
- <sizehint height="2un" type="MINIMUM" width="12un"/>
- <string name="text" value="txt_common_button_ok"/>
+ <sizehint height="7un" type="PREFERRED" width="21.875un"/>
+ <string locid="txt_common_button_ok" name="text" value="Ok"/>
<string name="state" value="normal"/>
</widget>
<widget name="scene_cancel_button" type="HbPushButton">
- <sizehint height="2un" type="PREFERRED"/>
- <string name="text" value="txt_common_button_cancel"/>
+ <sizehint height="7un" type="PREFERRED" width="21.875un"/>
+ <string locid="txt_common_button_cancel" name="text" value="Cancel"/>
<string name="state" value="normal"/>
- <sizehint height="2un" type="MINIMUM"/>
</widget>
<real name="z" value="0"/>
<sizehint height="7un" type="PREFERRED" width="23.8806un"/>
@@ -40,13 +37,13 @@
</widget>
<widget name="scene_title" type="HbLabel">
<real name="z" value="4"/>
- <contentsmargins bottom="0un" left="3un" right="0un" top="1un"/>
- <string name="plainText" value="txt_cam_title_scene_mode"/>
+ <string name="plainText" value="Scene settings dialog"/>
<fontspec name="fontSpec" role="Title" textheight="var(hb-param-text-height-primary)"/>
</widget>
<real name="z" value="2"/>
- <sizehint height="41.49254un" type="PREFERRED" width="43.8806un"/>
- <layout orientation="Vertical" type="linear">
+ <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
+ <sizehint height="41.49254un" type="PREFERRED" width="expr(var(hb-param-widget-dialog-width) )"/>
+ <layout orientation="Vertical" spacing="1un" type="linear">
<contentsmargins bottom="var(hb-param-margin-gene-bottom)" left="var(hb-param-margin-gene-left)" right="var(hb-param-margin-gene-right)" top="var(hb-param-margin-gene-top)"/>
<linearitem itemname="scene_title"/>
<linearitem itemname="scene_view_radioButtonList"/>
@@ -62,6 +59,7 @@
<anchoritem dst="scene_view_bg_icon2" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
<anchoritem dst="scene_view_bg_icon2" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
<anchoritem dst="scene_view_bg_icon2" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="scene_view_container" dstEdge="TOP" spacing="expr(var(hb-param-margin-gene-top) )" src="" srcEdge="TOP"/>
<anchoritem dst="scene_view_container" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
<anchoritem dst="scene_view_container" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-bottom)" src="" srcEdge="BOTTOM"/>
</layout>
@@ -69,11 +67,10 @@
<string name="title" value="Scene modes"/>
<bool name="contentFullScreen" value="TRUE"/>
<enums name="focusDelegation" value="FocusDelegationNone"/>
- <enums name="titleBarFlags" value="TitleBarMinimized|TitleBarHidden"/>
</widget>
<connect receiver="settings_scenes_view" sender="scene_ok_button" signal="released()" slot="handleOkButtonPress()"/>
<connect receiver="settings_scenes_view" sender="scene_cancel_button" signal="released()" slot="handleCancelButtonPress()"/>
- <metadata activeUIState="Common ui state" display="NHD landscape" unit="un">
+ <metadata activeUIState="Common ui state" display="NHD-3.2-inch_landscape" unit="un">
<uistate name="Common ui state" sections="#common"/>
</metadata>
</hbdocument>
--- a/camerauis/cameraxui/cxui/layouts/setting_slider.docml Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/layouts/setting_slider.docml Thu Jul 15 01:55:05 2010 +0300
@@ -6,7 +6,7 @@
</object>
<object name="action_cancel" type="HbAction">
<string name="role" value="HbDialog:secondaryAction"/>
- <string locid="txt_common_button_ok" name="text" value="Cancel"/>
+ <string locid="txt_common_button_cancel" name="text" value="Cancel"/>
</object>
<widget name="slider_settings_dialog" type="HbDialog">
<widget name="slider_settings_dialog_heading" role="HbDialog:headingWidget" type="HbLabel">
@@ -15,8 +15,9 @@
</widget>
<widget name="slider_dialog_container" role="HbDialog:contentWidget" type="HbWidget">
<widget name="settings_dialog_slider" type="HbSlider">
+ <enums name="orientation" value="Horizontal"/>
<bool name="visible" value="TRUE"/>
- <string name="orientation" value="Horizontal"/>
+ <bool name="trackFilled" value="FALSE"/>
</widget>
<layout orientation="Horizontal" type="linear">
<linearitem itemname="settings_dialog_slider"/>
--- a/camerauis/cameraxui/cxui/layouts/standbymode_popup.docml Thu May 13 21:30:19 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<hbdocument version="1.0">
- <widget name="standbymode_popup" type="HbDialog">
- <widget name="standbymode_widget" role="HbDialog:contentWidget" type="HbWidget">
- <widget name="standby_text" type="HbLabel">
- <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
- <real name="z" value="0.3"/>
- <sizehint height="360" type="MINIMUM" width="640"/>
- <string locid="txt_cam_info_camera_in_standby_mode" name="plainText" value="Camera in stand-by mode"/>
- </widget>
- <real name="z" value="0.1"/>
- </widget>
- <sizehint height="360" type="MINIMUM" width="640"/>
- </widget>
- <metadata activeUIState="Common ui state" display="NHD landscape" unit="un">
- <uistate name="Common ui state" sections="#common"/>
- </metadata>
-</hbdocument>
--- a/camerauis/cameraxui/cxui/layouts/video_setting.xml Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/layouts/video_setting.xml Thu Jul 15 01:55:05 2010 +0300
@@ -8,10 +8,10 @@
<!-- Video Show post-capture (setting list) -->
<setting_list id="video_showcaptured" heading="txt_cam_title_show_captured_video"
preview="0" type="SingleLineListBox" setting_icon="">
- <lnItem string="txt_cam_list_ln_sec" lnValue="2" value="2000" icon="" />
- <lnItem string="txt_cam_list_ln_sec" lnValue="10" value="10000" icon="" />
- <item string="txt_cam_list_continuous" value="-1" icon="" />
- <item string="txt_cam_list_not" value="0" icon="" />
+ <lnItem string="txt_cam_list_ln_sec_video" lnValue="2" value="2000" icon="" />
+ <lnItem string="txt_cam_list_ln_sec_video" lnValue="10" value="10000" icon="" />
+ <item string="txt_cam_list_continuous_video" value="-1" icon="" />
+ <item string="txt_cam_list_not_video" value="0" icon="" />
</setting_list>
<!-- White balance (setting list) -->
@@ -37,23 +37,32 @@
<item string="txt_cam_list_sepia" value="1" icon="" />
<item string="txt_cam_list_white" value="3" icon="" />
<item string="txt_cam_list_vivid" value="4" icon="" />
- <item string="txt_cam_list_negative" value="2" icon="" />
</setting_list>
<!-- Video scene modes -->
<setting_list id="video_scene_modes"
- heading="txt_cam_title_scene_mode"
+ heading="txt_cam_title_scene_mode_video"
preview="0"
type="SingleLineListBox">
- <item string="txt_cam_list_automatic_scene" value="video_scene_auto" icon="qtg_mono_automatic" />
+ <item string="txt_cam_list_automatic_scene_video" value="video_scene_auto" icon="qtg_mono_automatic" />
<item string="txt_cam_list_low_light" value="video_scene_low_light" icon="qtg_mono_low_light" />
- <item string="txt_cam_list_night" value="video_scene_night" icon="qtg_mono_night" />
+ <item string="txt_cam_list_night_video" value="video_scene_night" icon="qtg_mono_night" />
</setting_list>
+ <!-- GeoTagging (setting list) -->
+ <setting_list id="geotagging"
+ heading="txt_cam_title_geotagging"
+ preview="0"
+ type="SingleLineListBox"
+ setting_icon="">
+ <item string="txt_cam_list_geotagging_on" value="1" icon="" />
+ <item string="txt_cam_list_geotagging_off" value="0" icon="" />
+ </setting_list>
+
<!-- Exposure compensation (setting slider) -->
<setting_slider id="ev_compensation_value" heading="txt_cam_title_exposure_compensation" setting_icon="">
- <setup min="txt_cam_slidervalue_l1_minus" max="txt_cam_slidervalue_l1_plus" lnValue="2" minorStep="0.5" majorStep="1"/>
+ <setup min="txt_cam_slidervalue_l1_minus" max="txt_cam_slidervalue_l1_plus" l1Value="2" minorStep="0.5" majorStep="1"/>
</setting_slider>
</settings>
--- a/camerauis/cameraxui/cxui/layouts/view_postcapture.docml Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/layouts/view_postcapture.docml Thu Jul 15 01:55:05 2010 +0300
@@ -77,7 +77,6 @@
<string locid="txt_cam_title_camera" name="title" value="Camera"/>
<bool name="contentFullScreen" value="TRUE"/>
<bool name="visible" value="TRUE"/>
- <enums name="titleBarFlags" value="TitleBarHidden|TitleBarTransparent"/>
</widget>
<connect receiver="postcapture_view" sender="cxui_action_post_delete" signal="triggered(bool)" slot="showDeleteNote()"/>
<connect receiver="postcapture_view" sender="cxui_action_post_play" signal="triggered(bool)" slot="playVideo()"/>
--- a/camerauis/cameraxui/cxui/layouts/view_still_precapture.docml Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/layouts/view_still_precapture.docml Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<hbdocument context="CxuiStillPrecaptureView" version="1.0">
+<hbdocument context="CxuiStillPrecaptureView" version="1.1">
<object name="cxui_action_goto_2_camera" type="HbAction">
<string name="text" value="Go to 2nd camera"/>
</object>
@@ -14,18 +14,6 @@
<string name="settingskey" value="still_showcaptured"/>
<string locid="txt_cam_opt_show_captured_image" name="text" value="Show captured image"/>
</object>
- <object name="cxui_action_capturetone" type="HbAction">
- <string locid="txt_cam_opt_capture_tone" name="text" value="Capture tone"/>
- </object>
- <object name="cxui_action_imagerotation" type="HbAction">
- <string locid="txt_cam_opt_image_rotation" name="text" value="Image rotation"/>
- </object>
- <object name="cxui_action_setdefaultscenemode" type="HbAction">
- <string locid="txt_cam_opt_set_as_default_scene_mode" name="text" value="Set as default scene mode"/>
- </object>
- <object name="cxui_action_restore" type="HbAction">
- <string locid="txt_cam_opt_restore_settings" name="text" value="Restore settings"/>
- </object>
<object name="cxui_action_settings" type="HbAction">
<string locid="txt_cam_opt_camera_settings" name="text" value="Camera settings"/>
</object>
@@ -33,9 +21,10 @@
<string name="settingskey" value="imageQuality"/>
<string locid="txt_cam_opt_image_quality" name="text" value="Image quality"/>
</object>
- <object name="cxui_action_default_image_name" type="HbAction">
- <string locid="txt_cam_opt_default_image_name" name="text" value="Default image name"/>
- </object>
+ <object name="cxui_action_still_geotagging" type="HbAction">
+ <string name="settingskey" value="geotagging"/>
+ <string locid="txt_cam_opt_geotagging" name="text" value="Geotagging"/>
+ </object>
<object name="cxui_action_capture" type="HbAction">
<icon iconName="qtg_mono_capture" name="icon"/>
</object>
@@ -54,23 +43,47 @@
<widget name="transparent" type="HbTransparentWindow">
<real name="z" value="0"/>
</widget>
+ <layout type="anchor">
+ <anchoritem dst="transparent" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="transparent" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="transparent" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="transparent" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ <string name="title" value="Camera"/>
+ <bool name="contentFullScreen" value="TRUE"/>
+ </widget>
+ <section name="still_capture_indicators">
+ <widget name="still_container" role="HbView:widget" type="HbWidget">
<widget name="indicatorContainer" type="HbWidget">
<widget name="mode_indicator" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
<icon iconName="qtg_mono_camera" name="icon"/>
<sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
- <sizehint height="var(hb-param-graphic-size-secondary)" type="FIXED" width="var(hb-param-graphic-size-secondary)"/>
+ <sizehint height="var(hb-param-graphic-size-primary-small)" type="FIXED" width="var(hb-param-graphic-size-primary-small)"/>
</widget>
<widget name="quality_indicator" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
<sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
- <sizehint height="var(hb-param-graphic-size-secondary)" type="FIXED" width="var(hb-param-graphic-size-secondary)"/>
+ <sizehint height="var(hb-param-graphic-size-primary-small)" type="FIXED" width="var(hb-param-graphic-size-primary-small)"/>
<bool name="visible" value="TRUE"/>
</widget>
<widget name="flash_indicator" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
<sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
- <sizehint height="var(hb-param-graphic-size-secondary)" type="FIXED" width="var(hb-param-graphic-size-secondary)"/>
+ <sizehint height="var(hb-param-graphic-size-primary-small)" type="FIXED" width="var(hb-param-graphic-size-primary-small)"/>
+ <bool name="visible" value="TRUE"/>
+ </widget>
+ <widget name="still_geotagging_indicator" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+ <sizehint height="var(hb-param-graphic-size-primary-small)" type="FIXED" width="var(hb-param-graphic-size-primary-small)"/>
+ <bool name="visible" value="TRUE"/>
+ </widget>
+ <widget name="face_tracking_indicator" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+ <sizehint height="var(hb-param-graphic-size-primary-small)" type="FIXED" width="var(hb-param-graphic-size-primary-small)"/>
<bool name="visible" value="TRUE"/>
</widget>
<real name="z" value="5"/>
@@ -80,21 +93,16 @@
<linearitem itemname="mode_indicator"/>
<linearitem itemname="quality_indicator"/>
<linearitem itemname="flash_indicator"/>
+ <linearitem itemname="still_geotagging_indicator"/>
+ <linearitem itemname="face_tracking_indicator"/>
</layout>
</widget>
<layout type="anchor">
- <anchoritem dst="indicatorContainer" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="indicatorContainer" dstEdge="LEFT" spacing="11un" src="" srcEdge="LEFT"/>
<anchoritem dst="indicatorContainer" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
- <anchoritem dst="transparent" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
- <anchoritem dst="transparent" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
- <anchoritem dst="transparent" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
- <anchoritem dst="transparent" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
</layout>
</widget>
- <string name="title" value="Camera"/>
- <bool name="contentFullScreen" value="TRUE"/>
- <enums name="titleBarFlags" value="TitleBarHidden|TitleBarTransparent"/>
- </widget>
+ </section>
<section name="still_capture_with_widgets">
<widget name="still_capture_view" type="HbView">
<widget name="still_view_menu" role="HbView:menu" type="HbMenu"/>
@@ -105,14 +113,14 @@
<sizehint type="PREFERRED" width="var(hb-param-widget-toolbar-height)"/>
<enums name="orientation" value="Vertical"/>
<bool name="visible" value="TRUE"/>
- <ref object="cxui_action_capture" role="HbToolBar:addAction"/>
- <ref object="cxui_action_flash" role="HbToolBar:addAction"/>
- <ref object="cxui_action_scenemodes" role="HbToolBar:addAction"/>
- <ref object="cxui_action_goto_video" role="HbToolBar:addAction"/>
+ <ref object="cxui_action_capture" role="HbWidget:addAction"/>
+ <ref object="cxui_action_flash" role="HbWidget:addAction"/>
+ <ref object="cxui_action_scenemodes" role="HbWidget:addAction"/>
+ <ref object="cxui_action_goto_video" role="HbWidget:addAction"/>
</widget>
<widget name="zoom" type="HbSlider">
<real name="z" value="2"/>
- <sizehint height="40un" type="PREFERRED"/>
+ <sizehint height="40un" type="PREFERRED" width="9un"/>
<enums name="orientation" value="Vertical"/>
<bool name="visible" value="FALSE"/>
</widget>
@@ -133,6 +141,8 @@
<widget name="selftimer_button_container" type="HbWidget">
<widget name="still_selftimer_start_button" type="HbPushButton">
<real name="z" value="5"/>
+ <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+ <sizehint type="FIXED" width="20un"/>
<string locid="txt_cam_button_start" name="text" value="Start"/>
<bool name="visible" value="TRUE"/>
<string name="state" value="normal"/>
@@ -140,6 +150,9 @@
</widget>
<widget name="still_selftimer_cancel_button" type="HbPushButton">
<real name="z" value="4"/>
+ <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+ <sizehint type="FIXED" width="20un"/>
+ <sizehint height="7un" type="PREFERRED" width="20un"/>
<string locid="txt_cam_button_cancel" name="text" value="Cancel"/>
<bool name="visible" value="TRUE"/>
<string name="state" value="normal"/>
@@ -187,8 +200,6 @@
</widget>
<real name="z" value="1"/>
<layout type="anchor">
- <anchoritem dst="indicatorContainer" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
- <anchoritem dst="indicatorContainer" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
<anchoritem dst="toolbar" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
<anchoritem dst="toolbar" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
<anchoritem dst="toolbar" dstEdge="TOP" spacing="var(hb-param-widget-chrome-height)" src="" srcEdge="TOP"/>
@@ -202,16 +213,13 @@
<anchoritem dst="images_left_container" dstEdge="LEFT" spacing="11un" src="" srcEdge="LEFT"/>
<anchoritem dst="still_precapture_selftimer_container" dstEdge="CENTERH" spacing="0" src="" srcEdge="CENTERH"/>
<anchoritem dst="still_precapture_selftimer_container" dstEdge="CENTERV" spacing="0" src="" srcEdge="CENTERV"/>
+ <anchoritem dst="indicatorContainer" dstEdge="LEFT" spacing="11un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="indicatorContainer" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
</layout>
</widget>
- <enums name="titleBarFlags" value="TitleBarFloating|TitleBarTransparent"/>
</widget>
- <connect receiver="still_capture_view" sender="cxui_action_capturetone" signal="triggered(bool)" slot="launchNotSupportedNotification()"/>
- <connect receiver="still_capture_view" sender="cxui_action_imagerotation" signal="triggered(bool)" slot="launchNotSupportedNotification()"/>
- <connect receiver="still_capture_view" sender="cxui_action_setdefaultscenemode" signal="triggered(bool)" slot="launchNotSupportedNotification()"/>
- <connect receiver="still_capture_view" sender="cxui_action_restore" signal="triggered(bool)" slot="launchNotSupportedNotification()"/>
<connect receiver="still_capture_view" sender="cxui_action_image_quality" signal="triggered(bool)" slot="launchSetting()"/>
- <connect receiver="still_capture_view" sender="cxui_action_default_image_name" signal="triggered(bool)" slot="launchNotSupportedNotification()"/>
+ <connect receiver="still_capture_view" sender="cxui_action_still_geotagging" signal="triggered(bool)" slot="launchSetting()"/>
<connect receiver="still_capture_view" sender="still_view_menu" signal="aboutToShow()" slot="disableControlsTimeout()"/>
<connect receiver="still_capture_view" sender="still_view_menu" signal="aboutToHide()" slot="hideControls()"/>
<connect receiver="still_capture_view" sender="cxui_action_goto_photos" signal="triggered(bool)" slot="launchPhotosApp()"/>
@@ -220,46 +228,40 @@
<connect receiver="still_capture_view" sender="cxui_action_stillpostcapture" signal="triggered(bool)" slot="launchSetting()"/>
<connect receiver="still_capture_view" sender="cxui_action_goto_2_camera" signal="triggered(bool)" slot="requestCameraSwitch()"/>
<connect receiver="still_capture_view" sender="zoom" signal="valueChanged(int)" slot="zoomTo(int)"/>
- <connect receiver="still_capture_view" sender="cxui_action_capture" signal="triggered(bool)" slot="capture()"/>
+ <connect receiver="still_capture_view" sender="cxui_action_capture" signal="triggered(bool)" slot="focusAndCapture()"/>
<connect receiver="still_capture_view" sender="cxui_action_goto_video" signal="triggered(bool)" slot="goToVideo()"/>
<connect receiver="still_capture_view" sender="cxui_action_goto_video" signal="triggered(bool)" slot="hideControls()"/>
<connect receiver="still_capture_view" sender="cxui_action_flash" signal="triggered(bool)" slot="launchSetting()"/>
- <connect receiver="still_capture_view" sender="cxui_action_scenemodes" signal="triggered(bool)" slot="launchNotSupportedNotification()"/>
+ <connect receiver="still_capture_view" sender="cxui_action_scenemodes" signal="triggered(bool)" slot="launchScenesView()"/>
</section>
<section name="still_standalone_mode">
<widget name="still_view_menu" role="HbView:menu" type="HbMenu">
- <ref object="cxui_action_goto_photos" role="HbMenu:addAction"/>
- <ref object="cxui_action_self_timer" role="HbMenu:addAction"/>
- <ref object="cxui_action_settings" role="HbMenu:addAction"/>
+ <ref object="cxui_action_goto_photos" role="HbWidget:addAction"/>
+ <ref object="cxui_action_self_timer" role="HbWidget:addAction"/>
+ <ref object="cxui_action_settings" role="HbWidget:addAction"/>
<widget name="still_submenu_general" role="HbMenu:menu" type="HbMenu">
<string locid="txt_cam_opt_general_settings" name="title" value="General settings"/>
- <ref object="cxui_action_stillpostcapture" role="HbMenu:addAction"/>
- <ref object="cxui_action_image_quality" role="HbMenu:addAction"/>
- <ref object="cxui_action_default_image_name" role="HbMenu:addAction"/>
- <ref object="cxui_action_capturetone" role="HbMenu:addAction"/>
- <ref object="cxui_action_imagerotation" role="HbMenu:addAction"/>
+ <ref object="cxui_action_stillpostcapture" role="HbWidget:addAction"/>
+ <ref object="cxui_action_image_quality" role="HbWidget:addAction"/>
+ <ref object="cxui_action_still_geotagging" role="HbWidget:addAction"/>
</widget>
- <ref object="cxui_action_setdefaultscenemode" role="HbMenu:addAction"/>
- <ref object="cxui_action_restore" role="HbMenu:addAction"/>
</widget>
</section>
<section name="still_embedded_mode">
<widget name="still_view_menu" role="HbView:menu" type="HbMenu">
- <ref object="cxui_action_self_timer" role="HbMenu:addAction"/>
- <ref object="cxui_action_settings" role="HbMenu:addAction"/>
+ <ref object="cxui_action_self_timer" role="HbWidget:addAction"/>
+ <ref object="cxui_action_settings" role="HbWidget:addAction"/>
<widget name="still_submenu_general" role="HbMenu:menu" type="HbMenu">
<string locid="txt_cam_opt_general_settings" name="title" value="General settings"/>
<ref object="cxui_action_image_quality" role="HbMenu:addAction"/>
- <ref object="cxui_action_default_image_name" role="HbMenu:addAction"/>
- <ref object="cxui_action_imagerotation" role="HbMenu:addAction"/>
+ <ref object="cxui_action_still_geotagging" role="HbMenu:addAction"/>
</widget>
- <ref object="cxui_action_restore" role="HbMenu:addAction"/>
</widget>
</section>
- <metadata activeUIState="still_standalone_mode" display="NHD landscape" unit="un">
+ <metadata activeUIState="still_standalone_mode" display="NHD-3.2-inch_landscape" unit="un">
<uistate name="Common ui state" sections="#common"/>
<uistate name="still_capture_with_widgets" sections="#common still_capture_with_widgets"/>
<uistate name="still_standalone_mode" sections="#common still_capture_with_widgets still_standalone_mode"/>
<uistate name="still_embedded_mode" sections="#common still_capture_with_widgets still_embedded_mode"/>
</metadata>
-</hbdocument>
+</hbdocument>
\ No newline at end of file
--- a/camerauis/cameraxui/cxui/layouts/view_video_precapture.docml Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/layouts/view_video_precapture.docml Thu Jul 15 01:55:05 2010 +0300
@@ -1,11 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
-<hbdocument version="1.0">
+<hbdocument version="1.1">
<object name="cxui_video_action_record" type="HbAction">
<icon iconName="qtg_small_record" name="icon"/>
</object>
- <object name="cxui_video_action_light" type="HbAction">
- <icon iconName="qtg_mono_light" name="icon"/>
- </object>
<object name="cxui_video_action_zoom" type="HbAction">
<icon iconName="qtg_mono_zoom" name="icon"/>
</object>
@@ -22,9 +19,6 @@
<string name="settingskey" value="videoQuality"/>
<string locid="txt_cam_opt_video_quality" name="text" value="Video quality"/>
</object>
- <object name="cxui_video_action_restore" type="HbAction">
- <string locid="txt_cam_opt_restore_settings" name="text" value="Restore settings"/>
- </object>
<object name="cxui_video_action_help" type="HbAction">
<string name="text" value="Help"/>
</object>
@@ -41,15 +35,6 @@
<string name="settingskey" value="video_showcaptured"/>
<string locid="txt_cam_opt_show_captured_video" name="text" value="Show captured video"/>
</object>
- <object name="cxui_video_action_videosound" type="HbAction">
- <string locid="txt_cam_opt_video_sound" name="text" value="Video sound"/>
- </object>
- <object name="cxui_video_action_defaultvideoname" type="HbAction">
- <string locid="txt_cam_opt_default_video_name" name="text" value="Default video name"/>
- </object>
- <object name="cxui_video_action_setdefaultscenemode" type="HbAction">
- <string locid="txt_cam_opt_set_as_default_scene_mode" name="text" value="Set as default scene mode"/>
- </object>
<object name="cxui_video_action_settings" type="HbAction">
<string locid="txt_cam_opt_camera_settings" name="text" value="Camera settings"/>
</object>
@@ -57,35 +42,47 @@
<string locid="txt_cam_opt_go_to_videos" name="text" value="Go to Videos"/>
</object>
<widget name="video_capture_view" type="HbView">
- <widget name="video_view_menu" role="HbView:menu" type="HbMenu"/>
+ <widget name="video_view_menu" role="HbView:menu" type="HbMenu"/>
<widget name="video_container" role="HbView:widget" type="HbWidget">
<widget name="video_viewfinder_widget" type="HbTransparentWindow">
<real name="z" value="0"/>
</widget>
+ <layout type="anchor">
+ <anchoritem dst="video_viewfinder_widget" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="video_viewfinder_widget" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="video_viewfinder_widget" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="video_viewfinder_widget" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ <string locid="txt_cam_title_camera" name="title" value="Camera"/>
+ <bool name="contentFullScreen" value="TRUE"/>
+ </widget>
+ <section name="video_capture_indicators">
+ <widget name="video_container" role="HbView:widget" type="HbWidget">
<widget name="video_indicator_container_top" type="HbWidget">
<widget name="video_mode_indicator" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
<icon iconName="qtg_mono_camcorder" name="icon"/>
<sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
- <sizehint height="var(hb-param-graphic-size-secondary)" type="FIXED" width="var(hb-param-graphic-size-secondary)"/>
+ <sizehint height="var(hb-param-graphic-size-primary-small)" type="FIXED" width="var(hb-param-graphic-size-primary-small)"/>
</widget>
<widget name="video_quality_indicator" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
<icon iconName="qtg_mono_vga" name="icon"/>
<sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
- <sizehint height="var(hb-param-graphic-size-secondary)" type="FIXED" width="var(hb-param-graphic-size-secondary)"/>
+ <sizehint height="var(hb-param-graphic-size-primary-small)" type="FIXED" width="var(hb-param-graphic-size-primary-small)"/>
</widget>
<widget name="video_audio_mute_indicator" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
<icon iconName="qtg_mono_call_mute" name="icon"/>
<sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
- <sizehint height="var(hb-param-graphic-size-secondary)" type="FIXED" width="var(hb-param-graphic-size-secondary)"/>
+ <sizehint height="var(hb-param-graphic-size-primary-small)" type="FIXED" width="var(hb-param-graphic-size-primary-small)"/>
</widget>
<widget name="video_stability_indicator" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
<icon iconName="qtg_mono_call_mute" name="icon"/>
<sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
- <sizehint height="var(hb-param-graphic-size-secondary)" type="FIXED" width="var(hb-param-graphic-size-secondary)"/>
+ <sizehint height="var(hb-param-graphic-size-primary-small)" type="FIXED" width="var(hb-param-graphic-size-primary-small)"/>
<bool name="visible" value="FALSE"/>
</widget>
<real name="z" value="5"/>
@@ -99,18 +96,11 @@
</layout>
</widget>
<layout type="anchor">
- <anchoritem dst="video_indicator_container_top" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="video_indicator_container_top" dstEdge="LEFT" spacing="11un" src="" srcEdge="LEFT"/>
<anchoritem dst="video_indicator_container_top" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
- <anchoritem dst="video_viewfinder_widget" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
- <anchoritem dst="video_viewfinder_widget" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
- <anchoritem dst="video_viewfinder_widget" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
- <anchoritem dst="video_viewfinder_widget" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
</layout>
</widget>
- <string locid="txt_cam_title_camera" name="title" value="Camera"/>
- <bool name="contentFullScreen" value="TRUE"/>
- <enums name="titleBarFlags" value="TitleBarHidden"/>
- </widget>
+ </section>
<section name="video_capture_with_widgets">
<widget name="video_capture_view" type="HbView">
<widget name="video_view_menu" role="HbView:menu" type="HbMenu"/>
@@ -121,23 +111,21 @@
<sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
<sizehint type="PREFERRED" width="var(hb-param-widget-toolbar-height)"/>
<enums name="orientation" value="Vertical"/>
- <ref object="cxui_video_action_record" role="HbToolBar:addAction"/>
- <ref object="cxui_video_action_light" role="HbToolBar:addAction"/>
- <ref object="cxui_video_action_scene" role="HbToolBar:addAction"/>
- <ref object="cxui_video_action_gotostill" role="HbToolBar:addAction"/>
+ <ref object="cxui_video_action_record" role="HbWidget:addAction"/>
+ <ref object="cxui_video_action_scene" role="HbWidget:addAction"/>
+ <ref object="cxui_video_action_gotostill" role="HbWidget:addAction"/>
</widget>
<widget name="video_toolbar_recording" type="HbToolBar">
<enums name="layoutDirection" value="RightToLeft"/>
<sizehint type="PREFERRED" width="var(hb-param-widget-toolbar-height)"/>
<enums name="orientation" value="Vertical"/>
<bool name="visible" value="FALSE"/>
- <ref object="cxui_video_action_pause" role="HbToolBar:addAction"/>
- <ref object="cxui_video_action_light" role="HbToolBar:addAction"/>
- <ref object="cxui_video_action_stop" role="HbToolBar:addAction"/>
+ <ref object="cxui_video_action_pause" role="HbWidget:addAction"/>
+ <ref object="cxui_video_action_stop" role="HbWidget:addAction"/>
</widget>
<widget name="video_zoom" type="HbSlider">
<real name="z" value="8"/>
- <sizehint height="40un" type="PREFERRED"/>
+ <sizehint height="40un" type="PREFERRED" width="9un"/>
<enums name="orientation" value="Vertical"/>
</widget>
<widget name="video_toolbar_paused" type="HbToolBar">
@@ -145,9 +133,8 @@
<sizehint type="PREFERRED" width="var(hb-param-widget-toolbar-height)"/>
<enums name="orientation" value="Vertical"/>
<bool name="visible" value="FALSE"/>
- <ref object="cxui_video_action_resume" role="HbToolBar:addAction"/>
- <ref object="cxui_video_action_light" role="HbToolBar:addAction"/>
- <ref object="cxui_video_action_stop" role="HbToolBar:addAction"/>
+ <ref object="cxui_video_action_resume" role="HbWidget:addAction"/>
+ <ref object="cxui_video_action_stop" role="HbWidget:addAction"/>
</widget>
<widget name="video_indicator_container_bottom" type="HbWidget">
<widget name="video_recording_icon" type="HbLabel">
@@ -159,7 +146,7 @@
<widget name="video_remaining_time" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
<sizehint height="var(hb-param-graphic-size-function)" type="PREFERRED"/>
- <string name="textColor" value="#ff0000"/>
+ <string name="textColor" value="#ffffff"/>
<string name="plainText" value="00:00"/>
<fontspec name="fontSpec" role="Undefined" textheight="var(hb-param-text-height-tiny)"/>
</widget>
@@ -180,8 +167,6 @@
</layout>
</widget>
<layout type="anchor">
- <anchoritem dst="video_indicator_container_top" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
- <anchoritem dst="video_indicator_container_top" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
<anchoritem dst="video_viewfinder_widget" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
<anchoritem dst="video_viewfinder_widget" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
<anchoritem dst="video_viewfinder_widget" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
@@ -203,18 +188,16 @@
<anchoritem dst="video_viewfinder_widget" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
<anchoritem dst="video_viewfinder_widget" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
<anchoritem dst="video_viewfinder_widget" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="video_indicator_container_top" dstEdge="LEFT" spacing="11un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="video_indicator_container_top" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
</layout>
</widget>
- <enums name="titleBarFlags" value="TitleBarTransparent"/>
</widget>
<connect receiver="video_capture_view" sender="video_view_menu" signal="aboutToShow()" slot="disableControlsTimeout()"/>
<connect receiver="video_capture_view" sender="video_view_menu" signal="aboutToHide()" slot="hideControls()"/>
<connect receiver="video_capture_view" sender="cxui_video_action_settings" signal="triggered(bool)" slot="showSettingsGrid()"/>
<connect receiver="video_capture_view" sender="cxui_video_action_quality" signal="triggered(bool)" slot="launchSetting()"/>
- <connect receiver="video_capture_view" sender="cxui_video_action_restore" signal="triggered(bool)" slot="launchNotSupportedNotification()"/>
<connect receiver="video_capture_view" sender="cxui_video_action_showcapturedvideo" signal="triggered(bool)" slot="launchSetting()"/>
- <connect receiver="video_capture_view" sender="cxui_video_action_videosound" signal="triggered(bool)" slot="launchNotSupportedNotification()"/>
- <connect receiver="video_capture_view" sender="cxui_video_action_defaultvideoname" signal="triggered(bool)" slot="launchNotSupportedNotification()"/>
<connect receiver="video_capture_view" sender="video_zoom" signal="valueChanged(int)" slot="zoomTo(int)"/>
<connect receiver="video_capture_view" sender="cxui_video_action_record" signal="triggered(bool)" slot="record()"/>
<connect receiver="video_capture_view" sender="cxui_video_action_resume" signal="triggered(bool)" slot="record()"/>
@@ -222,37 +205,33 @@
<connect receiver="video_capture_view" sender="cxui_video_action_pause" signal="triggered(bool)" slot="pause()"/>
<connect receiver="video_capture_view" sender="cxui_video_action_gotostill" signal="triggered(bool)" slot="goToStill()"/>
<connect receiver="video_capture_view" sender="cxui_video_action_gotostill" signal="triggered(bool)" slot="hideControls()"/>
- <connect receiver="video_capture_view" sender="cxui_video_action_light" signal="triggered(bool)" slot="launchNotSupportedNotification()"/>
- <connect receiver="video_capture_view" sender="cxui_video_action_scene" signal="triggered(bool)" slot="launchNotSupportedNotification()"/>
+ <connect receiver="video_capture_view" sender="cxui_video_action_scene" signal="triggered(bool)" slot="launchVideoScenePopup()"/>
<connect receiver="video_capture_view" sender="cxui_video_action_gotovideos" signal="triggered(bool)" slot="launchVideosApp()"/>
</section>
<section name="video_standalone_mode">
<widget name="video_view_menu" role="HbView:menu" type="HbMenu">
- <ref object="cxui_video_action_gotovideos" role="HbMenu:addAction"/>
- <ref object="cxui_video_action_settings" role="HbMenu:addAction"/>
+ <ref object="cxui_video_action_gotovideos" role="HbWidget:addAction"/>
+ <ref object="cxui_video_action_settings" role="HbWidget:addAction"/>
<widget name="video_submenu_general" role="HbMenu:menu" type="HbMenu">
<string locid="txt_cam_opt_general_settings" name="title" value="General settings"/>
- <ref object="cxui_video_action_showcapturedvideo" role="HbMenu:addAction"/>
- <ref object="cxui_video_action_quality" role="HbMenu:addAction"/>
- <ref object="cxui_video_action_videosound" role="HbMenu:addAction"/>
- <ref object="cxui_video_action_defaultvideoname" role="HbMenu:addAction"/>
+ <ref object="cxui_video_action_showcapturedvideo" role="HbWidget:addAction"/>
+ <ref object="cxui_video_action_quality" role="HbWidget:addAction"/>
</widget>
- <ref object="cxui_video_action_restore" role="HbMenu:addAction"/>
</widget>
</section>
<section name="video_embedded_mode">
<widget name="video_view_menu" role="HbView:menu" type="HbMenu">
- <ref object="cxui_video_action_settings" role="HbMenu:addAction"/>
+ <ref object="cxui_video_action_settings" role="HbWidget:addAction"/>
<widget name="video_submenu_general" role="HbMenu:menu" type="HbMenu">
<string locid="txt_cam_opt_general_settings" name="title" value="General settings"/>
- <ref object="cxui_video_action_quality" role="HbMenu:addAction"/>
- <ref object="cxui_video_action_videosound" role="HbMenu:addAction"/>
- <ref object="cxui_video_action_defaultvideoname" role="HbMenu:addAction"/>
+ <ref object="cxui_video_action_quality" role="HbWidget:addAction"/>
</widget>
- <ref object="cxui_video_action_restore" role="HbMenu:addAction"/>
</widget>
</section>
<section name="video_idle">
+ <widget name="video_elapsed_time" type="HbLabel">
+ <bool name="visible" value="FALSE"/>
+ </widget>
<widget name="video_recording_icon" type="HbLabel">
<bool name="visible" value="FALSE"/>
</widget>
@@ -263,12 +242,37 @@
<linearitem itemname="video_remaining_time"/>
</layout>
</widget>
+ </section>
+ <section name="video_recording">
<widget name="video_elapsed_time" type="HbLabel">
- <bool name="visible" value="FALSE"/>
+ <bool name="visible" value="TRUE"/>
+ </widget>
+ <widget name="video_remaining_time" type="HbLabel">
+ <bool name="visible" value="TRUE"/>
+ </widget>
+ <widget name="video_recording_icon" type="HbLabel">
+ <bool name="visible" value="TRUE"/>
+ <icon iconName="qtg_small_record" name="icon"/>
+ </widget>
+ <widget name="video_indicator_container_bottom" type="HbWidget">
+ <bool name="visible" value="TRUE"/>
+ <layout orientation="Horizontal" spacing="var(hb-param-margin-gene-middle-horizontal)" type="linear">
+ <contentsmargins bottom="var(hb-param-margin-gene-middle-vertical)" left="var(hb-param-margin-gene-middle-horizontal)" right="var(hb-param-margin-gene-middle-horizontal)" top="var(hb-param-margin-gene-middle-vertical)"/>
+ <linearitem itemname="video_recording_icon"/>
+ <linearitem itemname="video_elapsed_time"/>
+ <linearitem itemname="video_remaining_time"/>
+ </layout>
</widget>
</section>
- <section name="video_recording">
+ <section name="video_paused">
+ <widget name="video_elapsed_time" type="HbLabel">
+ <bool name="visible" value="TRUE"/>
+ </widget>
+ <widget name="video_remaining_time" type="HbLabel">
+ <string name="textColor" value="#ffffff"/>
+ </widget>
<widget name="video_recording_icon" type="HbLabel">
+ <icon iconName="qtg_mono_pause" name="icon"/>
<bool name="visible" value="TRUE"/>
</widget>
<widget name="video_indicator_container_bottom" type="HbWidget">
@@ -280,31 +284,8 @@
<linearitem itemname="video_remaining_time"/>
</layout>
</widget>
- <widget name="video_elapsed_time" type="HbLabel">
- <bool name="visible" value="TRUE"/>
- </widget>
- <widget name="video_remaining_time" type="HbLabel">
- <bool name="visible" value="TRUE"/>
- </widget>
</section>
- <section name="video_paused">
- <widget name="video_recording_icon" type="HbLabel">
- <bool name="visible" value="FALSE"/>
- </widget>
- <widget name="video_indicator_container_bottom" type="HbWidget">
- <bool name="visible" value="TRUE"/>
- <layout orientation="Horizontal" spacing="var(hb-param-margin-gene-middle-horizontal)" type="linear">
- <contentsmargins bottom="var(hb-param-margin-gene-middle-vertical)" left="var(hb-param-margin-gene-middle-horizontal)" right="var(hb-param-margin-gene-middle-horizontal)" top="var(hb-param-margin-gene-middle-vertical)"/>
- <linearitem itemname="video_recording_icon"/>
- <linearitem itemname="video_elapsed_time"/>
- <linearitem itemname="video_remaining_time"/>
- </layout>
- </widget>
- <widget name="video_elapsed_time" type="HbLabel">
- <bool name="visible" value="TRUE"/>
- </widget>
- </section>
- <metadata activeUIState="Recording" display="NHD landscape" unit="un">
+ <metadata activeUIState="Paused" display="NHD-3.2-inch_landscape" unit="un">
<uistate name="Common ui state" sections="#common"/>
<uistate name="All widgets" sections="#common video_capture_with_widgets"/>
<uistate name="video_standalone_mode" sections="#common video_capture_with_widgets video_standalone_mode"/>
--- a/camerauis/cameraxui/cxui/src/cxuiapplication.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuiapplication.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -33,7 +33,7 @@
*/
CxuiApplication::CxuiApplication(int &argc, char *argv[])
- : HbApplication(argc, argv, Hb::NoSplash)
+ : HbApplication(argc, argv, Hb::SplashFixedHorizontal)
{
CX_DEBUG_IN_FUNCTION();
}
--- a/camerauis/cameraxui/cxui/src/cxuiapplicationframeworkmonitor.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuiapplicationframeworkmonitor.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -28,13 +28,7 @@
CxuiApplicationFrameworkMonitor::CxuiApplicationFrameworkMonitor(CxuiApplication &application, CxeSettings &settings)
{
CX_DEBUG_ENTER_FUNCTION();
- p = new CxuiApplicationFrameworkMonitorPrivate(application, settings);
-
- connect(p, SIGNAL(foregroundStateChanged(CxuiApplicationFrameworkMonitor::ForegroundState)),
- this, SIGNAL(foregroundStateChanged(CxuiApplicationFrameworkMonitor::ForegroundState)));
- connect(p, SIGNAL(batteryEmpty()), this, SIGNAL(batteryEmpty()));
-
-
+ p = new CxuiApplicationFrameworkMonitorPrivate(this, application, settings);
CX_DEBUG_EXIT_FUNCTION();
}
@@ -57,4 +51,13 @@
return p->foregroundState();
}
+/*!
+* Is USB connected in mass memory mode?
+* @return True if USB mass memory mode is active and connected, false otherwise.
+*/
+bool CxuiApplicationFrameworkMonitor::isUsbMassMemoryModeActive() const
+{
+ return p->isUsbMassMemoryModeActive();
+}
+
// end of file
--- a/camerauis/cameraxui/cxui/src/cxuiapplicationframeworkmonitorprivate.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuiapplicationframeworkmonitorprivate.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -25,14 +25,19 @@
#include <eikenv.h>
#include <avkondomainpskeys.h> // keyguard state
#include <hwrmpowerstatesdkpskeys.h> // battery status
+#include <UsbWatcherInternalPSKeys.h> // usb status
+#include <usbman.h>
+#include <usbpersonalityids.h>
#include <QMetaEnum>
#include <QString>
#include <QVariant>
#include <qsymbianevent.h>
+
#endif // Q_OS_SYMBIAN
#include "cxutils.h"
+#include "cxuieventlog.h"
#include "cxuiapplication.h"
#include "cxesettings.h"
#include "cxuiapplicationframeworkmonitorprivate.h"
@@ -64,6 +69,11 @@
return convertTDesC2QString(name);
}
+ inline QString bitString(int number, char fill = '0', int width = 32)
+ {
+ return QString::number(number, 2).rightJustified(width, fill);
+ }
+
//!@todo: Avkon UIDs not needed once device dialogs fully implemented in Orbit.
// AknCapServer
@@ -75,6 +85,10 @@
static const unsigned int UID_TASKSWITCHER = 0x2002677D;
// Dialog server
static const unsigned int UID_DIALOGAPPSERVER = 0x20022FC5;
+
+ // Log event types
+ static const char *EVENT_USB = "usb";
+ static const char *EVENT_FOREGROUND = "foreground";
}
#endif // Q_OS_SYMBIAN
@@ -82,8 +96,11 @@
/*!
* Constructor
*/
-CxuiApplicationFrameworkMonitorPrivate::CxuiApplicationFrameworkMonitorPrivate(CxuiApplication &application, CxeSettings& settings)
- : mApplication(application),
+CxuiApplicationFrameworkMonitorPrivate::CxuiApplicationFrameworkMonitorPrivate(CxuiApplicationFrameworkMonitor *parent,
+ CxuiApplication &application,
+ CxeSettings& settings)
+ : q(parent),
+ mApplication(application),
mSettings(settings),
#ifdef Q_OS_SYMBIAN
mWsSession(CCoeEnv::Static()->WsSession()),
@@ -92,17 +109,18 @@
mWindowGroupName(),
mKeyLockState(EKeyguardNotActive),
mBatteryStatus(EBatteryStatusUnknown),
+ mUsbPersonality(0),
+ mEventLog(NULL),
#endif // Q_OS_SYMBIAN
mState(CxuiApplicationFrameworkMonitor::ForegroundOwned)
{
CX_DEBUG_ENTER_FUNCTION();
-
#ifdef Q_OS_SYMBIAN
mWindowGroup.EnableFocusChangeEvents();
mWindowGroupName = windowGroupName(mWsSession, mWindowGroupId);
+ mEventLog = new CxuiEventLog("CxuiApplicationFrameworkMonitorPrivate");
init();
#endif // Q_OS_SYMBIAN
-
CX_DEBUG_EXIT_FUNCTION();
}
@@ -111,7 +129,11 @@
*/
CxuiApplicationFrameworkMonitorPrivate::~CxuiApplicationFrameworkMonitorPrivate()
{
- CX_DEBUG_IN_FUNCTION();
+ CX_DEBUG_ENTER_FUNCTION();
+#ifdef Q_OS_SYMBIAN
+ delete mEventLog;
+#endif // Q_OS_SYMBIAN
+ CX_DEBUG_EXIT_FUNCTION();
}
/*!
@@ -123,6 +145,24 @@
return mState;
}
+/*!
+* Is USB connected in mass memory mode?
+* @return True if USB mass memory mode is active and connected, false otherwise.
+*/
+bool CxuiApplicationFrameworkMonitorPrivate::isUsbMassMemoryModeActive() const
+{
+ bool active(false);
+#ifdef Q_OS_SYMBIAN
+ // Mass memory mode activity can be seen from the KUsbWatcherSelectedPersonality property.
+ // When USB is connected in Mass Memory Mode, we get KUsbPersonalityIdMS as personality id.
+ // If USB is not connected, personality id is KUsbWatcherSelectedPersonalityNone.
+ active = (mUsbPersonality == KUsbPersonalityIdMS);
+#endif // Q_OS_SYMBIAN
+ return active;
+}
+
+
+
#ifdef Q_OS_SYMBIAN
/*!
* Slot to handle Symbian event.
@@ -153,7 +193,7 @@
CX_DEBUG_ENTER_FUNCTION();
if (uid == KPSUidAvkonDomain.iUid && key == KAknKeyguardStatus) {
- CX_DEBUG(("CxuiApplicationFrameworkMonitor - keylock status changed: %d -> %d", value.toInt(), mKeyLockState));
+ CX_DEBUG(("CxuiApplicationFrameworkMonitor - keylock status changed: %d -> %d", mKeyLockState, value.toInt()));
// Check if the keylock value has actually changed
const int newKeyLockState = value.toInt();
@@ -163,7 +203,7 @@
setState(getCurrentState());
}
} else if (uid == KPSUidHWRMPowerState.iUid && key == KHWRMBatteryStatus ) {
- CX_DEBUG(("CxuiApplicationFrameworkMonitor - battery status changed: %d -> %d", value.toInt(), mBatteryStatus));
+ CX_DEBUG(("CxuiApplicationFrameworkMonitor - battery status changed: %d -> %d", mBatteryStatus, value.toInt() ));
// If status changed, check if battery is going empty.
const int newBatteryStatus = value.toInt();
@@ -172,8 +212,29 @@
// Notify that battery is almost empty,
// need to stop any recordings etc.
- if( mBatteryStatus == EBatteryStatusEmpty ) {
- emit batteryEmpty();
+ if(mBatteryStatus == EBatteryStatusEmpty) {
+ emit q->batteryEmpty();
+ }
+ }
+ } else if (uid == KPSUidUsbWatcher.iUid && key == KUsbWatcherSelectedPersonality) {
+ CX_DEBUG(("CxuiApplicationFrameworkMonitor - usb personality changed: %d -> %d", mUsbPersonality, value.toInt()));
+
+ const int newUsbPersonality(value.toInt());
+ if (newUsbPersonality != mUsbPersonality) {
+ // Check before saving the new state if mass memory mode was active,
+ // so we know when to emit the unactivated signal.
+ const bool wasUsbMassMemoryModeActive(isUsbMassMemoryModeActive());
+ // Store new state.
+ mUsbPersonality = newUsbPersonality;
+
+ // Save state to log.
+ if (mEventLog) {
+ mEventLog->append(EVENT_USB, QString::number(mUsbPersonality));
+ }
+
+ // Check if mass memory mode activity changed.
+ if (wasUsbMassMemoryModeActive != isUsbMassMemoryModeActive()) {
+ emit q->usbMassMemoryModeToggled(isUsbMassMemoryModeActive());
}
}
}
@@ -201,6 +262,10 @@
mSettings.get(KPSUidAvkonDomain.iUid, KAknKeyguardStatus, Cxe::PublishAndSubscribe, value);
mKeyLockState = value.toInt();
+ // Get current USB personality
+ mSettings.get(KPSUidUsbWatcher.iUid, KUsbWatcherSelectedPersonality, Cxe::PublishAndSubscribe, value);
+ mUsbPersonality = value.toInt();
+
bool ok = connect(&mSettings, SIGNAL(settingValueChanged(long int, unsigned long int, QVariant)),
this, SLOT(handlePropertyEvent(long int, unsigned long int, QVariant)));
CX_DEBUG_ASSERT(ok);
@@ -215,7 +280,7 @@
* Helper method to handle Symbian event that specificly is of type QSymbianEvent::WindowServerEvent.
* @param event Symbian event to be handled. (Ownership not taken.)
*/
-bool CxuiApplicationFrameworkMonitorPrivate::handleWindowServerEvent(const QSymbianEvent *event)
+void CxuiApplicationFrameworkMonitorPrivate::handleWindowServerEvent(const QSymbianEvent *event)
{
// We receive tons of these events, so function start and end traces
// are intentionally left out.
@@ -242,13 +307,13 @@
const TWsVisibilityChangedEvent *visibilityEvent = wsEvent->VisibilityChanged();
if (visibilityEvent) {
CX_DEBUG(("CxuiApplicationFrameworkMonitor - EFullyVisible: bits[%s]",
- QString::number(TWsVisibilityChangedEvent::EFullyVisible, 2).toAscii().constData() ));
+ bitString(TWsVisibilityChangedEvent::EFullyVisible).toAscii().constData() ));
CX_DEBUG(("CxuiApplicationFrameworkMonitor - EPartiallyVisible: bits[%s]",
- QString::number(TWsVisibilityChangedEvent::EPartiallyVisible, 2).toAscii().constData() ));
+ bitString(TWsVisibilityChangedEvent::EPartiallyVisible).toAscii().constData() ));
CX_DEBUG(("CxuiApplicationFrameworkMonitor - ENotVisible: bits[%s]",
- QString::number(TWsVisibilityChangedEvent::ENotVisible, 2).toAscii().constData() ));
+ bitString(TWsVisibilityChangedEvent::ENotVisible).toAscii().constData() ));
CX_DEBUG(("CxuiApplicationFrameworkMonitor - event: bits[%s]",
- QString::number(visibilityEvent->iFlags, 2).toAscii().constData() ));
+ bitString(visibilityEvent->iFlags).toAscii().constData() ));
}
break;
}
@@ -256,8 +321,6 @@
break;
}
}
-
- return false;
}
/*!
@@ -287,14 +350,17 @@
}
if (mState != original) {
- CX_DEBUG(("CxuiApplicationFrameworkMonitor - state change [%s] -> [%s]",
- CxuiApplicationFrameworkMonitor::staticMetaObject.enumerator(
- CxuiApplicationFrameworkMonitor::staticMetaObject.indexOfEnumerator("ForegroundState")).valueToKey(original),
- CxuiApplicationFrameworkMonitor::staticMetaObject.enumerator(
- CxuiApplicationFrameworkMonitor::staticMetaObject.indexOfEnumerator("ForegroundState")).valueToKey(mState) ));
+ // Print the event log with this foreground event included.
+ if (mEventLog) {
+ mEventLog->append(
+ EVENT_FOREGROUND,
+ CxuiApplicationFrameworkMonitor::staticMetaObject.enumerator(
+ CxuiApplicationFrameworkMonitor::staticMetaObject.indexOfEnumerator("ForegroundState")).valueToKey(mState));
+ mEventLog->print();
+ }
// If state was changed, signal it to listeners.
- emit foregroundStateChanged(mState);
+ emit q->foregroundStateChanged(mState);
}
}
}
@@ -312,6 +378,7 @@
if (mKeyLockState != EKeyguardNotActive) {
// Keylock enabled is the same as if other application is in foreground.
+ CX_DEBUG(("CxuiApplicationFrameworkMonitor - key lock on"));
state = CxuiApplicationFrameworkMonitor::ForegroundFullyLost;
} else if (focusWindowGroupId == mWindowGroupId) {
// If our window group has focus, we clearly are the foreground owning application.
@@ -374,7 +441,6 @@
#ifdef CX_DEBUG
QString name(windowGroupName(mWsSession, focusWgId));
-
CX_DEBUG(("CxuiApplicationFrameworkMonitor - Own window group id: 0x%08x", mWindowGroupId));
CX_DEBUG(("CxuiApplicationFrameworkMonitor - Focused window group id: 0x%08x", focusWgId));
CX_DEBUG(("CxuiApplicationFrameworkMonitor - Own window group name: [%s]", mWindowGroupName.toAscii().constData()));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxui/src/cxuiapplicationstate.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,271 @@
+/*
+* Copyright (c) 2010 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 <QMetaEnum>
+
+#include "cxutils.h"
+#include "cxuieventlog.h"
+#include "cxuierrormanager.h"
+#include "cxuiapplicationstate.h"
+
+namespace
+{
+ static const char *EVENT_APPLICATION_STATE = "application state";
+}
+
+/*!
+* Constructor.
+*/
+CxuiApplicationState::CxuiApplicationState(CxuiApplication &application,
+ CxeSettings &settings,
+ CxuiDocumentLoader *documentLoader)
+ : mState(Background), mApplicationMonitor(NULL), mErrorManager(NULL), mEventLog(NULL)
+{
+ mApplicationMonitor = new CxuiApplicationFrameworkMonitor(application, settings);
+ mErrorManager = new CxuiErrorManager(documentLoader);
+
+ // Foreground state change signals
+ connect(mApplicationMonitor, SIGNAL(foregroundStateChanged(CxuiApplicationFrameworkMonitor::ForegroundState)),
+ this, SLOT(handleForegroundStateChanged(CxuiApplicationFrameworkMonitor::ForegroundState)));
+
+ // Battery empty signal
+ connect(mApplicationMonitor, SIGNAL(batteryEmpty()), this, SLOT(handleBatteryEmpty()));
+
+ // USB mass memory mode signal
+ connect(mApplicationMonitor, SIGNAL(usbMassMemoryModeToggled(bool)),
+ this, SLOT(handleUsbMassMemoryModeChanged(bool)));
+
+ // Severe error signals
+ connect(mErrorManager, SIGNAL(errorPopupShown()), this, SLOT(handleSevereError()));
+ connect(mErrorManager, SIGNAL(errorPopupClosed()), this, SLOT(handleErrorCleared()));
+
+#ifdef CX_DEBUG
+ mEventLog = new CxuiEventLog("CxuiApplicationState");
+#endif
+}
+
+/*!
+* Destructor.
+*/
+CxuiApplicationState::~CxuiApplicationState()
+{
+ delete mErrorManager;
+ delete mApplicationMonitor;
+ delete mEventLog;
+}
+
+/*!
+* Get current application state.
+*/
+CxuiApplicationState::State CxuiApplicationState::currentState() const
+{
+ return mState;
+}
+
+/*!
+* Start monitoring the application state.
+* Initial state is checked and signal emitted about state change *unless* state is Background.
+*/
+void CxuiApplicationState::startMonitoring()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ // Foreground handling checks for errors if needed.
+ handleForegroundStateChanged(mApplicationMonitor->foregroundState());
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Handle error from UI or engine.
+* Error will be checked and if it is severe, application state will become Error and error note will be shown.
+* If error is not severe, a warning note will be shown.
+* @param error The error id.
+*/
+void CxuiApplicationState::handleApplicationError(CxeError::Id error)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ if (error != CxeError::None) {
+ mErrorManager->check(error);
+ // If error manager sees this error as severe one, it will signal that back.
+ // We will handle updating state in handleSevereError().
+ // If only warning note (or nothing) is needed, application state is not changed.
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Handle change in application foreground status.
+* @param state New foreground status.
+*/
+void CxuiApplicationState::handleForegroundStateChanged(CxuiApplicationFrameworkMonitor::ForegroundState state)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ if (state == CxuiApplicationFrameworkMonitor::ForegroundFullyLost) {
+ CX_DEBUG(("CxuiApplicationState - application is in background"));
+ // Background overwrites even any error. We clear any active errors.
+ // When returning to background, error situation will be re-checked.
+ setState(Background);
+ mErrorManager->clear();
+ } else {
+ CX_DEBUG(("CxuiApplicationState - application is in partial / full foreground"));
+ // Check that we were in background. Switching between partial and full background
+ // needs no actions.
+ if (currentState() == Background) {
+ CX_DEBUG(("CxuiApplicationState - application was in background before, moving to foreground"));
+ // Check that there's no active errors that have been ignored in background.
+ checkErrors();
+ if (currentState() != Error) {
+ setState(Normal);
+ }
+ }
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Handle USB mass memory mode (USB MMM) activating or deactivating.
+* If USB MMM activates, we enter error state and display error note.
+* When USB MMM deactivates, we hide the note and move to standby mode.
+* @param active Is the USB mass memory mode active.
+*/
+void CxuiApplicationState::handleUsbMassMemoryModeChanged(bool active)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ if (active) {
+ // USB error is not handled if:
+ // (a) other severe error already active
+ // (b) application is in background
+ if (currentState() == Normal || currentState() == Standby) {
+ // Emulate memory not accessible error.
+ handleApplicationError(CxeError::MemoryNotAccessible);
+ }
+ } else {
+ // If we had USB error, clear it now.
+ if (currentState() == Error) {
+ setState(Standby);
+ // Clear memory not accessible error.
+ mErrorManager->clear();
+ }
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Handle battery emptying. We need to stop all activity and exit the application.
+*/
+void CxuiApplicationState::handleBatteryEmpty()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ setState(Background);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Handle a severe error after Error Manager has analyzed it.
+*/
+void CxuiApplicationState::handleSevereError()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ // In background we do not change the state from Background to anything else.
+ if (currentState() != Background) {
+ setState(Error);
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Severe error has been cleared.
+* Check if we should return to normal or background state.
+*/
+void CxuiApplicationState::handleErrorCleared()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ // No state change if we are not currently in Error state.
+ if (currentState() == Error) {
+ setState(Normal);
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Slot for requesting Standby state to be entered.
+* Request is accepted only if current state is Normal. Otherwise call has no effect.
+*/
+void CxuiApplicationState::enterStandby()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ if (currentState() == Normal) {
+ setState(Standby);
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Slot for requesting state change from Standby to Normal state.
+* Request is accepted only if current state is Standby. Otherwise call has no effect.
+*/
+void CxuiApplicationState::exitStandby()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ if (currentState() == Standby) {
+ setState(Normal);
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Set new state.
+* If state is actually changing, stateChanged() signal is emitted.
+*/
+void CxuiApplicationState::setState(State newState)
+{
+ if (mState != newState) {
+#ifdef CX_DEBUG
+ if (mEventLog) {
+ mEventLog->append(EVENT_APPLICATION_STATE,
+ CxuiApplicationState::staticMetaObject.enumerator(
+ CxuiApplicationState::staticMetaObject.
+ indexOfEnumerator("State")).valueToKey(newState));
+ mEventLog->print();
+ }
+#endif // CX_DEBUG
+
+ State oldState = mState;
+ mState = newState;
+ emit stateChanged(newState, oldState);
+ }
+}
+
+/*!
+* Check if we have known errors active at the moment.
+* State is set to CxuiApplicationState::Error, if error is found.
+*/
+void CxuiApplicationState::checkErrors()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ if (mApplicationMonitor->isUsbMassMemoryModeActive()) {
+ // Force Error state even if Background is still the current state.
+ // We use this method to check errors also when returning from background.
+ // Normally in Background state we do not enter Error state.
+ setState(Error);
+ handleApplicationError(CxeError::MemoryNotAccessible);
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+// end of file
--- a/camerauis/cameraxui/cxui/src/cxuidocumentloader.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuidocumentloader.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -45,7 +45,7 @@
QObject *CxuiDocumentLoader::createObject(const QString& type, const QString &name)
{
- OstTrace0( camerax_performance, CXUIDOCUMENTLOADER_CREATEOBJECT, "msg: e_CX_DOCLOADER_CREATEOBJECT 1" );
+ OstTrace0(camerax_performance, CXUIDOCUMENTLOADER_1, "msg: e_CX_DOCUMENTLOADER_CREATEOBJECT 1");
QObject *object = NULL;
if (type == "HbView") {
@@ -55,7 +55,7 @@
object = new CxuiVideoPrecaptureView();
} else if (name == CxUiLayout::POSTCAPTURE_VIEW) {
object = new CxuiPostcaptureView();
- } else if (name == CxUiLayout::STILL_SCENES_VIEW) {
+ } else if (name == CxUiLayout::SCENE_MODE_VIEW) {
object = new CxuiSceneModeView(NULL);
}
} else if (type == "HbDialog") {
@@ -66,13 +66,13 @@
} else if (type == "HbSlider") {
if (name == CxUiLayout::SETTINGS_SLIDER_DIALOG_CONTENT_WIDGET) {
object = new CxuiSettingSlider(NULL, mEngine);
- } else if (name == CxUiLayout::STILL_PRE_CAPTURE_ZOOM_SLIDER
+ } else if (name == CxUiLayout::STILL_PRE_CAPTURE_ZOOM_SLIDER
|| name == CxUiLayout::VIDEO_PRE_CAPTURE_ZOOM_SLIDER) {
object = new CxuiZoomSlider();
}
} else if (type == "HbRadioButtonList") {
if (name == CxUiLayout::SETTINGS_DIALOG_CONTENT_WIDGET
- || name == CxUiLayout::SCENE_VIEW_RADIOBUTTONS) {
+ || name == CxUiLayout::SCENE_MODE_VIEW_RADIOBUTTONS) {
object = new CxuiSettingRadioButtonList(NULL, mEngine);
}
}
@@ -83,7 +83,7 @@
object = HbDocumentLoader::createObject(type, name);
}
- OstTrace0( camerax_performance, DUP1_CXUIDOCUMENTLOADER_CREATEOBJECT, "msg: e_CX_DOCLOADER_CREATEOBJECT 0" );
+ OstTrace0(camerax_performance, CXUIDOCUMENTLOADER_2, "msg: e_CX_DOCUMENTLOADER_CREATEOBJECT 0");
return object;
}
--- a/camerauis/cameraxui/cxui/src/cxuierrormanager.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuierrormanager.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -16,6 +16,7 @@
*/
#include <QCoreApplication>
+#include <HbAction>
#include <HbDialog>
#include <HbMessageBox>
#include <HbLabel>
@@ -33,10 +34,10 @@
/*!
* Constructor
*/
-CxuiErrorManager::CxuiErrorManager(CxuiCaptureKeyHandler &keyHandler,CxuiDocumentLoader *documentLoader) :
- mKeyHandler(keyHandler),
+CxuiErrorManager::CxuiErrorManager(CxuiDocumentLoader *documentLoader) :
mDocumentLoader(documentLoader),
mErrorMsgPopup(NULL),
+ mErrorId(CxeError::None),
mErrorSeverity(CxuiErrorManager::None)
{
CX_DEBUG_ENTER_FUNCTION();
@@ -54,23 +55,31 @@
/*!
-* Analyze the error code and act accordingly.
-* @param error Error code.
+* Check the error code and show either error popup, warning popup or do nothing,
+* if "no error" code is given.
+* @param error Error id. If CxeError::None, no action is taken. Otherwise
+* either warning or error popup is shown based on the severity of error.
+*
*/
-void CxuiErrorManager::analyze(CxeError::Id error)
+void CxuiErrorManager::check(CxeError::Id error)
{
CX_DEBUG_ENTER_FUNCTION();
-
- mErrorMsgPopup = NULL;
mErrorSeverity = CxuiErrorManager::None;
if (error != CxeError::None) {
+ mErrorId = error;
+
// start evaluating the error.
- QString errorMsgTxt = getErrorDetails(error);
+ QString errorText;
+ QString buttonText;
+ getErrorDetails(errorText, buttonText);
- if(mErrorSeverity != CxuiErrorManager::None) {
+ if (mErrorSeverity != CxuiErrorManager::None) {
+ // Clear the old error if one for some reason exists.
+ clear();
+
// show the error note to the user.
- launchPopup(errorMsgTxt);
+ launchPopup(errorText, buttonText);
} else {
// ignore
}
@@ -79,15 +88,32 @@
CX_DEBUG_EXIT_FUNCTION();
}
+/*!
+* Close the open error popup.
+*/
+void CxuiErrorManager::clear()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ if (mErrorMsgPopup) {
+ mErrorMsgPopup->close();
+ mErrorMsgPopup = NULL;
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
/*!
* Slot that gets called when error note is closed.
*/
-void CxuiErrorManager::aboutToClosePopup()
+void CxuiErrorManager::popupClosed(HbAction *action)
{
+ Q_UNUSED(action)
+
CX_DEBUG_ENTER_FUNCTION();
+ // Dialog or action instance cannot be used anymore.
+ mErrorMsgPopup = NULL;
+
// handle any use-cases when the error can be recovered
- emit errorRecovered();
+ emit errorPopupClosed();
CX_DEBUG_EXIT_FUNCTION();
}
@@ -109,59 +135,71 @@
* and set the severity level, based on given error code.
* @param error Error code to be analyzed.
*/
-QString CxuiErrorManager::getErrorDetails(CxeError::Id error)
+void CxuiErrorManager::getErrorDetails(QString &errorText, QString &buttonText)
{
CX_DEBUG_ENTER_FUNCTION();
- QString msg("No Error");
- switch(error) {
+ switch (mErrorId) {
+ case CxeError::MemoryNotAccessible:
+ mErrorSeverity = CxuiErrorManager::Error;
+ errorText = hbTrId("txt_cam_info_error_usb_disconnected");
+ buttonText = hbTrId("txt_cam_info_error_usb_disconnected_button");
+ break;
+ case CxeError::InUse:
+ mErrorSeverity = CxuiErrorManager::Error;
+ errorText = hbTrId("txt_cam_info_camera_already_in_use");
+ buttonText = hbTrId("txt_common_button_close");
+ break;
+ case CxeError::DiskFull:
+ mErrorSeverity = CxuiErrorManager::Warning;
+ errorText = hbTrId("txt_cam_info_memory_full");
+ break;
+ case CxeError::OutOfMemory:
+ mErrorSeverity = CxuiErrorManager::Error;
+ errorText = hbTrId("txt_cam_info_error_ram_full");
+ buttonText = hbTrId("txt_common_ok");
+ break;
case CxeError::Died:
case CxeError::InitializationFailed:
case CxeError::HwNotAvailable:
case CxeError::NotReady:
- mErrorSeverity = CxuiErrorManager::Severe;
- msg = hbTrId("txt_cam_info_error");
- break;
- case CxeError::InUse:
- mErrorSeverity = CxuiErrorManager::Severe;
- msg = hbTrId("txt_cam_info_camera_already_in_use");
- break;
- case CxeError::DiskFull:
- mErrorSeverity = CxuiErrorManager::Warning;
- msg = hbTrId("txt_cam_info_memory_full");
default:
+ mErrorSeverity = CxuiErrorManager::Error;
+ errorText = hbTrId("txt_cam_info_error");
+ buttonText = hbTrId("txt_common_button_close");
break;
}
CX_DEBUG_EXIT_FUNCTION();
-
- return msg;
}
/*!
-*
+* Show warning or error popup.
+* @param errorText Message to be shown in the popup.
+* @param buttonText Button text to be shown in the action button of the popup. Not used on warning popup.
*/
-void CxuiErrorManager::launchPopup(QString& errorMsgTxt)
+void CxuiErrorManager::launchPopup(const QString &errorText, const QString &buttonText)
{
CX_DEBUG_ENTER_FUNCTION();
switch (mErrorSeverity) {
- case CxuiErrorManager::Warning:
- showLowSeverityNote(errorMsgTxt);
+ case CxuiErrorManager::None:
break;
- case CxuiErrorManager::Severe:
- case CxuiErrorManager::Critical:
- showHighSeverityNote(errorMsgTxt);
+ case CxuiErrorManager::Warning:
+ showWarningPopup(errorText);
break;
default:
+ showErrorPopup(errorText, buttonText);
break;
}
+ mErrorSeverity = CxuiErrorManager::None;
+
CX_DEBUG_EXIT_FUNCTION();
}
/*!
-* Show error note for high severity error.
+* Show error note for severe error.
*/
-void CxuiErrorManager::showHighSeverityNote(QString& errorMsgTxt)
+void CxuiErrorManager::showErrorPopup(const QString &errorText, const QString &buttonText)
{
// we always prepare the popup for the new message and hence we load the
// popup everytime from document loader
@@ -175,6 +213,8 @@
mErrorMsgPopup = qobject_cast<HbDialog*>(mDocumentLoader->findWidget(CxUiLayout::ERROR_POPUP));
CX_ASSERT_ALWAYS(mErrorMsgPopup);
+ mErrorMsgPopup->setAttribute(Qt::WA_DeleteOnClose, true);
+ mErrorMsgPopup->setTimeout(HbDialog::NoTimeout);
// HbDialog's default background item is replaced with black rectangle
QGraphicsRectItem *backgroundItem = new QGraphicsRectItem();
@@ -184,36 +224,32 @@
backgroundItem->setRect(origBgItem->boundingRect());
mErrorMsgPopup->setBackgroundItem(backgroundItem);
- mErrorMsgPopup->setTimeout(HbDialog::NoTimeout);
- mErrorMsgPopup->setBackgroundFaded(false);
// color of standby text is set in the code. It cannot be done in docml
HbLabel* label = qobject_cast<HbLabel*>(mDocumentLoader->findWidget(CxUiLayout::ERROR_TEXT_WIDGET));
label->setTextColor(Qt::white);
- label->setPlainText(errorMsgTxt);
+ label->setPlainText(errorText);
HbPushButton *exitButton = qobject_cast<HbPushButton*>(mDocumentLoader->findWidget(CxUiLayout::ERROR_BUTTON_WIDGET));
-
- if(mErrorSeverity == CxuiErrorManager::Severe) {
+ if (!buttonText.isEmpty()) {
// inform ui about error recovery
- emit aboutToRecoverError();
- QObject::connect(mErrorMsgPopup, SIGNAL(aboutToClose()), this, SLOT(closeApp()));
+ exitButton->setText(buttonText);
+ connect(exitButton, SIGNAL(released()), this, SLOT(closeApp()));
exitButton->show();
- } else {
- // TODO handle other severity cases here.
}
- mErrorMsgPopup->show();
+ emit errorPopupShown();
+ mErrorMsgPopup->open(this, SLOT(popupClosed(HbAction*)));
CX_DEBUG_EXIT_FUNCTION();
}
/*!
-* Show error note for low severity error.
+* Show warning note for low severity error.
*/
-void CxuiErrorManager::showLowSeverityNote(QString& errorMsgTxt)
+void CxuiErrorManager::showWarningPopup(const QString &errorText)
{
CX_DEBUG_ENTER_FUNCTION();
- HbMessageBox::warning(errorMsgTxt);
+ HbMessageBox::warning(errorText);
CX_DEBUG_EXIT_FUNCTION();
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxui/src/cxuieventlog.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2010 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 "cxutils.h"
+#include "cxuieventlog.h"
+
+/*!
+* Event log item constructor.
+* @param type Event type description
+* @param id Event id description
+*/
+CxuiEventLog::CxuiEvent::CxuiEvent(const QString &type, const QString &value)
+ : mTime(QTime::currentTime()), mType(type), mValue(value)
+{
+}
+
+
+/*!
+* Event log constructor.
+* @param name Event log name.
+* @param size Maximum number of events stored to log. After maximum size is encountered,
+* old events are discarded as new ones are added.
+*/
+CxuiEventLog::CxuiEventLog(const QString& name, int size)
+ : mSize(size),
+ mName(name)
+{
+}
+
+/*!
+* Event log destructor.
+*/
+CxuiEventLog::~CxuiEventLog()
+{
+}
+
+/*!
+* Append new event to the log.
+* @param type Event type description
+* @param id Event id description
+*/
+void CxuiEventLog::append(const QString &type, const QString &value)
+{
+ if (mSize) {
+ if (mEvents.size() >= mSize) {
+ mEvents.removeFirst();
+ }
+ mEvents.append(CxuiEvent(type, value));
+ }
+}
+
+/*!
+* Print out the event log.
+*/
+void CxuiEventLog::print() const
+{
+ if (mEvents.size()) {
+
+ CX_DEBUG(("[INFO] >>> CameraX event log[%s]", mName.toAscii().constData()));
+ foreach(CxuiEvent e, mEvents) {
+ CX_DEBUG(("[INFO] <-> event: time[%s] type[%s] value[%s]",
+ e.mTime.toString("HH:mm:ss.zzz").toAscii().constData(),
+ e.mType.toAscii().constData(),
+ e.mValue.toAscii().constData()));
+ }
+ CX_DEBUG(("[INFO] <<< CameraX event log[%s]", mName.toAscii().constData()));
+ }
+}
+
+// end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxui/src/cxuifullscreenpopup.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,256 @@
+/*
+* Copyright (c) 2010 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 <QGraphicsScene>
+#include <QGraphicsRectItem>
+#include <QGraphicsAnchorLayout>
+#include <HbLabel>
+#include <HbPushButton>
+#include <HbInstantFeedback>
+#include "cxutils.h"
+#include "cxuienums.h"
+#include "cxuiview.h"
+#include "cxuidocumentloader.h"
+#include "cxuifullscreenpopup.h"
+
+/*!
+* Constructor.
+*/
+CxuiFullScreenPopup::CxuiFullScreenPopupLoader::CxuiFullScreenPopupLoader()
+ : HbDocumentLoader()
+{
+}
+
+/*!
+* Create object from DocML.
+* Custom type of object created when object name matches the full screen dialog one.
+* Other items are propagated to HbDocumentLoader for standard handling.
+* @param type Object type (class name)
+* @param name Object name, name of the item in DocML.
+*/
+QObject *CxuiFullScreenPopup::CxuiFullScreenPopupLoader::createObject(const QString& type, const QString &name)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ QObject *object = NULL;
+
+ // HbWidget as type in DocML to support UI layout tool.
+ if (type == "HbWidget") {
+ if (name == CxUiLayout::FULL_SCREEN_POPUP) {
+ object = new CxuiFullScreenPopup();
+ }
+ }
+
+ if (object) {
+ object->setObjectName(name);
+ } else {
+ object = HbDocumentLoader::createObject(type, name);
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+ return object;
+}
+
+/*!
+* Load a full screen popup from DocML and set given message and action text to it.
+* @param scene Graphics scene where to insert the popup.
+* @param message Popup message text.
+* @param action Popup action button text.
+*/
+CxuiFullScreenPopup *CxuiFullScreenPopup::create(QGraphicsScene *scene,
+ const QString &message,
+ const QString &action)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ bool ok(true);
+
+ // Load popup structure from DocML.
+ CxuiFullScreenPopupLoader *loader = new CxuiFullScreenPopupLoader();
+ loader->load(CxUiLayout::FULL_SCREEN_POPUP_XML, &ok);
+ CX_ASSERT_ALWAYS(ok);
+
+ // Popup container widget.
+ CxuiFullScreenPopup *popup = qobject_cast<CxuiFullScreenPopup *>(loader->findWidget(CxUiLayout::FULL_SCREEN_POPUP));
+ CX_ASSERT_ALWAYS(popup);
+ // Popup needs scene to move in front of all widgets.
+ popup->setScene(scene);
+ // Add background graphic for popup.
+ QGraphicsRectItem *bg = new QGraphicsRectItem(popup);
+ bg->setRect(popup->geometry());
+ bg->setBrush(Qt::black);
+ popup->setBackgroundItem(bg);
+
+ // Popup text.
+ //!@todo: Move text color definition to DocML once supported there.
+ HbLabel *text = qobject_cast<HbLabel*>(loader->findWidget(CxUiLayout::FULL_SCREEN_POPUP_TEXT));
+ CX_ASSERT_ALWAYS(text);
+ text->setPlainText(message);
+ text->setTextColor(Qt::white);
+
+ // Action button.
+ // Hidden if empty text given.
+ HbPushButton *button = qobject_cast<HbPushButton*>(loader->findWidget(CxUiLayout::FULL_SCREEN_POPUP_BUTTON));
+ CX_ASSERT_ALWAYS(button);
+ if (action.isEmpty()) {
+ CX_DEBUG(("CxuiFullScreenPopup - no button text given, hiding button.."));
+ button->setVisible(false);
+ } else {
+ button->setText(action);
+ }
+
+ delete loader;
+ loader = NULL;
+
+ CX_DEBUG_EXIT_FUNCTION();
+ return popup;
+}
+
+/*!
+* Popup destructor.
+*/
+CxuiFullScreenPopup::~CxuiFullScreenPopup()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ hide();
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Handle mouse press event.
+*/
+void CxuiFullScreenPopup::handleMousePress()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ // Give standard feedback.
+ HbInstantFeedback feedback(HbFeedback::BasicItem);
+ feedback.setModalities(HbFeedback::All);
+ feedback.play();
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Handle mouse release event.
+*/
+void CxuiFullScreenPopup::handleMouseRelease()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ //!@todo: sound disabling doesn't work in orbit yet so don't do feedback on release
+ // needs to be enabled when orbit support is done
+ // Give tactile feedback but no sound feedback on mouse release.
+ /*
+ HbInstantFeedback feedback(HbFeedback::BasicItem);
+ feedback.setModalities(HbFeedback::Tactile);
+ feedback.play();
+ CX_DEBUG_EXIT_FUNCTION();
+ */
+}
+
+/*!
+* Show the popup.
+* Checks current top most item in the scene and adds this popup in front of it.
+* Input to below widgets is blocked.
+*/
+void CxuiFullScreenPopup::show()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ CX_ASSERT_ALWAYS(mScene);
+
+ if (!mPopupShown) {
+ mPopupShown = true;
+ // Store current top item z value.
+ qreal topZ(topZValue());
+ // Add popup widget to scene to actually get it visible.
+ mScene->addItem(this);
+ // Make sure popup is just above the top item.
+ setZValue(topZ + 1);
+
+ // Block input to other widgets below the popup.
+ setWindowFlags(Qt::Dialog);
+ setPanelModality(QGraphicsItem::PanelModal);
+
+ // Show popup.
+ HbWidget::show();
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Hide the popup.
+*/
+void CxuiFullScreenPopup::hide()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (mPopupShown) {
+ HbWidget::hide();
+ // Double check non-nullness.
+ if (mScene) {
+ mScene->removeItem(this);
+ }
+ mPopupShown = false;
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Get the z value of top item in scene.
+* @return Top (max) z value.
+*/
+qreal CxuiFullScreenPopup::topZValue() const
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ qreal z(0);
+ if (mScene) {
+ const QList<QGraphicsItem *> itemList(mScene->items(Qt::DescendingOrder));
+ foreach (QGraphicsItem *item, itemList) {
+ // Max of z values.
+ z = (item && item->zValue() > z) ? item->zValue() : z;
+#ifdef CX_DEBUG
+ const QGraphicsObject *gObject(item->toGraphicsObject());
+ CX_DEBUG(("Item of class [%s] z value [%s]",
+ gObject ? gObject->metaObject()->className() : qPrintable(QString("QGraphicsItem")),
+ qPrintable(QString::number(item->zValue()))));
+#endif // CX_DEBUG
+ }
+ } else {
+ CX_DEBUG(("[WARNING] No scene found, returning zero"));
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+ return z;
+}
+
+/*!
+* Store the scene in which this popup is to be shown.
+*/
+void CxuiFullScreenPopup::setScene(QGraphicsScene *scene)
+{
+ mScene = scene;
+}
+
+/*!
+* Popup (private) constructor.
+*/
+CxuiFullScreenPopup::CxuiFullScreenPopup()
+ : mScene(NULL),
+ mPopupShown(false)
+{
+ CX_DEBUG_IN_FUNCTION();
+}
+
+// end of file
--- a/camerauis/cameraxui/cxui/src/cxuipostcaptureview.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuipostcaptureview.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -17,7 +17,6 @@
#include <QDebug>
#include <QPixmap>
#include <QTimer>
-#include <QGraphicsSceneEvent>
#include <QFileInfo>
#include <QApplication>
#include <QGraphicsRectItem>
@@ -30,9 +29,10 @@
#include <hbtoolbar.h>
#include <hbaction.h>
#include <hbmessagebox.h>
-#include <hbnotificationdialog.h>
+#include <hbactivitymanager.h>
#include <shareui.h>
+#include <thumbnailmanager_qt.h>
#include "cxeviewfindercontrol.h"
#include "cxuienums.h"
@@ -40,7 +40,6 @@
#include "cxeengine.h"
#include "cxecameradevicecontrol.h"
#include "cxestillcapturecontrol.h"
-#include "cxeviewfindercontrol.h"
#include "cxevideocapturecontrol.h"
#include "cxestillimage.h"
#include "cxutils.h"
@@ -50,75 +49,74 @@
#include "cxenamespace.h"
#include "cxuiserviceprovider.h"
+#ifdef Q_OS_SYMBIAN
#include "OstTraceDefinitions.h"
#ifdef OST_TRACE_COMPILER_IN_USE
#include "cxuipostcaptureviewTraces.h"
#endif
+#endif //Q_OS_SYMBIAN
using namespace CxUiLayout;
using namespace Cxe;
-// CONSTANTS
-const int CXUI_HIDE_CONTROLS_TIMEOUT = 6000; // 6 seconds
-const QString PhotosAppExe = "photos.exe";
-const QString VideosAppExe = "videoplayer.exe";
-//!@todo Temporarily disabled.
-//const int CXUI_STOP_VIEWFINDER_TIMEOUT = 5000; // 5 seconds
-//const int CXUI_RELEASE_CAMERA_TIMEOUT = 10000; // 10 seconds
+namespace {
+ const QString FILENAME_KEY = "filename";
+ const int CXUI_STOP_VIEWFINDER_TIMEOUT = 5000; // 5 seconds
+ const int CXUI_RELEASE_CAMERA_TIMEOUT = 60000; // 60 seconds
+}
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::CxuiPostcaptureView
-//
-// ---------------------------------------------------------------------------
-//
+
+/*!
+* Constructor.
+*/
CxuiPostcaptureView::CxuiPostcaptureView(QGraphicsItem *parent) :
- HbView(parent),
- mMainWindow(NULL),
- mEngine(NULL),
+ CxuiView(parent),
mStillToolbar(NULL),
mVideoToolbar(NULL),
mEmbeddedToolbar(NULL),
mBackgroundItem(NULL),
mImageLabel(NULL),
- mHideControlsTimeout(this),
+ mShareUi(NULL),
mStopViewfinderTimer(this),
mReleaseCameraTimer(this),
mPostcaptureTimer(this),
- mTimersStarted(false)
+ mTimersStarted(false),
+ mDeleteNoteOpen(false),
+ mFilename(QString::null),
+ mThumbnailManager(NULL)
{
CX_DEBUG_IN_FUNCTION();
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::~CxuiPostcaptureView
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+* Destructor.
+*/
CxuiPostcaptureView::~CxuiPostcaptureView()
{
CX_DEBUG_ENTER_FUNCTION();
QCoreApplication::instance()->removeEventFilter(this);
stopTimers();
+ delete mThumbnailManager;
+ delete mShareUi;
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::construct
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+* Second phase construction.
+*/
void CxuiPostcaptureView::construct(HbMainWindow *mainwindow, CxeEngine *engine,
- CxuiDocumentLoader *documentLoader)
+ CxuiDocumentLoader *documentLoader,
+ CxuiCaptureKeyHandler *keyHandler,
+ HbActivityManager *activityManager)
{
+ Q_UNUSED(keyHandler);
CX_DEBUG_ENTER_FUNCTION();
- mMainWindow = mainwindow;
- mEngine = engine;
- mDocumentLoader = documentLoader;
+ CxuiView::construct(mainwindow, engine, documentLoader, NULL, activityManager);
// set back action to go back to pre-capture
HbAction *backAction = new HbAction(Hb::BackNaviAction, this);
@@ -134,6 +132,8 @@
mImageLabel = qobject_cast<HbLabel *>(widget);
CX_DEBUG_ASSERT(mImageLabel);
+ mShareUi = new ShareUi();
+
// get toolbar pointers from the documentloader
widget = mDocumentLoader->findWidget(STILL_POST_CAPTURE_TOOLBAR);
// This resize is a workaround to get toolbar shown correctly.
@@ -177,30 +177,30 @@
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::handleCaptureKeyPressed
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+* Handle pressing capture key.
+*/
void CxuiPostcaptureView::handleCaptureKeyPressed()
{
CX_DEBUG_ENTER_FUNCTION();
- goToPrecaptureView();
+ if (!mDeleteNoteOpen) {
+ goToPrecaptureView();
+ }
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::handleAutofocusKeyPressed
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+* Handle pressing auto focus key.
+*/
void CxuiPostcaptureView::handleAutofocusKeyPressed()
{
CX_DEBUG_ENTER_FUNCTION();
- goToPrecaptureView();
+ if (!mDeleteNoteOpen) {
+ goToPrecaptureView();
+ }
CX_DEBUG_EXIT_FUNCTION();
}
@@ -210,53 +210,74 @@
*/
void CxuiPostcaptureView::playVideo()
{
+ CX_DEBUG_ENTER_FUNCTION();
- launchNotSupportedNotification();
- //! @todo needs an implementation
- CX_DEBUG_IN_FUNCTION();
+ stopTimers();
+ releaseCamera();
+
+ QString videoFile(getCurrentFilename());
+
+ XQAiwRequest *videoRequest = mAppManager.create(
+ "com.nokia.symbian.IVideoView","playMedia(QString)", true);
+
+ if (videoRequest) {
+ QVariantList fileList;
+ fileList.append(QVariant(videoFile));
+ videoRequest->setArguments(fileList);
+
+ CX_DEBUG(("CxuiPostcaptureView: sending request"));
+ QVariant result;
+ bool res = videoRequest->send(result);
+ if (res) {
+ CX_DEBUG(("CxuiPostcaptureView: request sent, received \"%s\"",
+ result.toString().toAscii().constData()));
+ } else {
+ CX_DEBUG(("CxuiPostcaptureView: request sending failed, error=%d",
+ videoRequest->lastError()));
+ }
+ delete videoRequest;
+ videoRequest = NULL;
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::showDeleteNote
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+* Show delete query.
+*/
void CxuiPostcaptureView::showDeleteNote()
{
CX_DEBUG_ENTER_FUNCTION();
hideControls();
- if (mEngine->mode() == Cxe::VideoMode) {
- HbMessageBox::question(hbTrId("txt_cam_other_delete_video_clip"),
- this,
- SLOT(handleDeleteDialogClosed(HbAction*)));
- } else {
- HbMessageBox::question(hbTrId("txt_cam_other_delete_image"),
- this,
- SLOT(handleDeleteDialogClosed(HbAction*)));
- }
+ QString text(mEngine->mode() == Cxe::VideoMode
+ ? hbTrId("txt_cam_other_delete_video_clip")
+ : hbTrId("txt_cam_other_delete_image"));
+ HbMessageBox::question(text,
+ this,
+ SLOT(handleDeleteDialogClosed(int)),
+ HbMessageBox::Yes | HbMessageBox::No);
+
+ mDeleteNoteOpen = true;
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::handleDeleteDialogClosed
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiPostcaptureView::handleDeleteDialogClosed(HbAction *action)
+/*!
+* Handle closing delete query dialog.
+* @param action HbMessageBox::Yes if user accepted the delete query, HbMessageBox::No if not.
+*/
+void CxuiPostcaptureView::handleDeleteDialogClosed(int action)
{
CX_DEBUG_ENTER_FUNCTION();
hideControls();
-
- HbMessageBox *dlg = qobject_cast<HbMessageBox*>(sender());
+ mDeleteNoteOpen = false;
- // check that it was "primary action" that closed the dialog
- if (dlg && dlg->actions().at(0) == action) {
- // User confirmed delete
+ // Check that user confirmed delete
+ if (action == HbMessageBox::Yes) {
QString filename = getCurrentFilename();
QFileInfo fileInfo(filename);
if (fileInfo.exists()) {
@@ -267,7 +288,7 @@
// is being harvested by MdS etc.
QDir dir = fileInfo.absolutePath();
bool ok = dir.remove(fileInfo.fileName());
- CX_DEBUG(("Delete file [%s], status %d", fileInfo.fileName().toAscii().constData(), ok));
+ CX_DEBUG(("Delete file [%s], status %d", qPrintable(fileInfo.fileName()), ok));
// Go back to precapture view
goToPrecaptureView();
@@ -287,25 +308,19 @@
stopTimers();
releaseCamera();
-
+ hideControls();
QString filename = getCurrentFilename();
-
QStringList filelist;
filelist.append(filename);
- ShareUi dialog;
- dialog.send(filelist, true);
-
- showControls();
+ mShareUi->send(filelist, true);
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::goToPrecaptureView
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+* Go to pre-capture view.
+*/
void CxuiPostcaptureView::goToPrecaptureView()
{
CX_DEBUG_ENTER_FUNCTION();
@@ -317,8 +332,8 @@
// Re-enabling starting timers the next time we enter post capture view.
mTimersStarted = false;
- // Make sure engine prepares for new image/video if necessary
- mEngine->initMode(mEngine->mode());
+ // reset saved filename
+ mFilename = QString::null;
// Switch to pre-capture view
emit changeToPrecaptureView();
@@ -327,11 +342,9 @@
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::stopViewfinder
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+* Stop viewfinder.
+*/
void CxuiPostcaptureView::stopViewfinder()
{
CX_DEBUG_ENTER_FUNCTION();
@@ -344,32 +357,12 @@
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::releaseCamera
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiPostcaptureView::releaseCamera()
+/*!
+* Hides toolbar.
+*/
+void CxuiPostcaptureView::hideToolbar()
{
CX_DEBUG_ENTER_FUNCTION();
-
- if (mMainWindow->currentView() == this) {
- mEngine->cameraDeviceControl().release();
- }
- mReleaseCameraTimer.stop();
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::hideControls
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiPostcaptureView::hideControls()
-{
- CX_DEBUG_ENTER_FUNCTION();
-
if (mStillToolbar) {
mStillToolbar->hide();
}
@@ -379,64 +372,13 @@
if (mEmbeddedToolbar) {
mEmbeddedToolbar->hide();
}
-
- hideItems(Hb::AllItems);
-
- mControlsVisible = false;
-
- // stop hiding control timer
- mHideControlsTimeout.stop();
-
-
- // give the keyboard focus back to the view
- // for the view to receive key events
- setFocus();
-
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::showControls
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiPostcaptureView::showControls()
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- showToolbar();
-
- showItems(Hb::AllItems);
-
- mHideControlsTimeout.start(CXUI_HIDE_CONTROLS_TIMEOUT);
- mControlsVisible = true;
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::toggleControls
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiPostcaptureView::toggleControls()
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- if (mControlsVisible) {
- hideControls();
- } else {
- showControls();
- }
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::eventFilter
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+* Handle events.
+* Needed for restarting timers.
+*/
bool CxuiPostcaptureView::eventFilter(QObject *object, QEvent *event)
{
Q_UNUSED(object)
@@ -465,31 +407,73 @@
*/
void CxuiPostcaptureView::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
- OstTrace0(camerax_performance, CXUIPOSTCAPTUREVIEW_SNAPSHOT_DRAW, "msg: e_CX_SHOT_TO_SNAPSHOT 0");
- QGraphicsWidget::paint(painter, option, widget);
+ OstTrace0(camerax_performance, CXUIPOSTCAPTUREVIEW_SNAPSHOT_DRAW, "msg: e_CX_SHOT_TO_SNAPSHOT 0");
+ QGraphicsWidget::paint(painter, option, widget);
+}
+
+/*!
+ * Restore view state from activity.
+ * @param activityId Activity id
+ * @param data Activity data
+ */
+void CxuiPostcaptureView::restoreActivity(const QString &activityId, const QVariant &data)
+{
+ Q_UNUSED(activityId);
+ CX_DEBUG_ENTER_FUNCTION();
+
+ // get filename. if filename is not found (toString() returns empty string)
+ // we will go back to pre-capture in updateSnapshotImage()
+ mFilename = data.toMap()[FILENAME_KEY].toString();
+ CX_DEBUG(("Got filename %s from activity", mFilename.toAscii().data()));
+
+ CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::mousePressEvent
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiPostcaptureView::mousePressEvent(QGraphicsSceneMouseEvent *event)
+/*!
+ * Save view state to activity.
+ */
+void CxuiPostcaptureView::saveActivity()
{
- //! @todo temporary workaround for title bar mouse event handling bug
- if (event->type() == QEvent::GraphicsSceneMousePress && event->scenePos().y() > 70) {
- mPostcaptureTimer.stop();
- toggleControls();
- event->accept();
+ CX_DEBUG_ENTER_FUNCTION();
+ QVariantMap data;
+ QVariantHash params;
+
+ QString filename = getCurrentFilename();
+ CX_DEBUG(("Saving filename %s", filename.toAscii().data()));
+ data.insert(FILENAME_KEY, filename);
+
+ QImage img(mMainWindow->rect().size(), QImage::Format_ARGB32_Premultiplied);
+ QPainter p(&img);
+ mMainWindow->render(&p, mMainWindow->rect(), mMainWindow->rect());
+
+ QPixmap screenshot = QPixmap::fromImage(img);
+
+ params.insert("screenshot", screenshot);
+ if (mEngine->mode() == Cxe::ImageMode) {
+ mActivityManager->removeActivity(CxuiActivityIds::STILL_POSTCAPTURE_ACTIVITY);
+ mActivityManager->addActivity(CxuiActivityIds::STILL_POSTCAPTURE_ACTIVITY, data, params);
+ } else {
+ mActivityManager->removeActivity(CxuiActivityIds::VIDEO_POSTCAPTURE_ACTIVITY);
+ mActivityManager->addActivity(CxuiActivityIds::VIDEO_POSTCAPTURE_ACTIVITY, data, params);
}
-
+ CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::showEvent
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+ * Clear activity from activity manager.
+ */
+void CxuiPostcaptureView::clearActivity()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mActivityManager->removeActivity(CxuiActivityIds::STILL_POSTCAPTURE_ACTIVITY);
+ mActivityManager->removeActivity(CxuiActivityIds::VIDEO_POSTCAPTURE_ACTIVITY);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Show event for this view.
+* Update snapshot and start timers.
+*/
void CxuiPostcaptureView::showEvent(QShowEvent *event)
{
CX_DEBUG_ENTER_FUNCTION();
@@ -508,11 +492,10 @@
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::hideEvent
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+* Hide event.
+* Release snapshot and stop timers.
+*/
void CxuiPostcaptureView::hideEvent(QHideEvent *event)
{
CX_DEBUG_ENTER_FUNCTION();
@@ -581,41 +564,50 @@
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiPostcaptureView::setImage
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+ * Updates snapshot image. In normal case snapshot is retrieved from engine
+ * but if we are restoring camera to post-capture through activity, then
+ * we get snapshot from thumbnail manager.
+ */
void CxuiPostcaptureView::updateSnapshotImage()
{
CX_DEBUG_ENTER_FUNCTION();
- QPixmap snapshot;
+ if (!mFilename.isNull()) {
+ CX_DEBUG(("CxuiPostcaptureView::updateSnapshot restoring activity"));
+ // filename set, we are restoring activity
+ if (QFile::exists(mFilename)) {
+ CX_DEBUG(("Filename ok, requesting thumbnail from TNM"));
+ if (!mThumbnailManager) {
+ mThumbnailManager = new ThumbnailManager();
+ connect(mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void *, int, int)),
+ this, SLOT(handleThumbnailReady(QPixmap, void*, int, int)));
+ mThumbnailManager->setThumbnailSize(ThumbnailManager::ThumbnailLarge);
+ }
+ mThumbnailManager->getThumbnail(mFilename);
+ CX_DEBUG(("Thumbnail requested"));
- if (mEngine->mode() == ImageMode) {
- if( mEngine->stillCaptureControl().imageCount() > 0 ) {
- snapshot = mEngine->stillCaptureControl()[0].snapshot();
+ } else {
+ // file deleted
+ CX_DEBUG(("File %s has been deleted, going back to pre-capture", mFilename.toAscii().data()));
+ goToPrecaptureView();
}
} else {
- snapshot = mEngine->videoCaptureControl().snapshot();
+ QPixmap snapshot;
+ if (mEngine->mode() == ImageMode) {
+ if( mEngine->stillCaptureControl().imageCount() > 0 ) {
+ snapshot = mEngine->stillCaptureControl()[0].snapshot();
+ }
+ } else {
+ snapshot = mEngine->videoCaptureControl().snapshot();
+ }
+ if (mImageLabel) {
+ mImageLabel->setIcon(HbIcon(QIcon(snapshot)));
+ } else {
+ // do nothing
+ }
}
- if (mImageLabel) {
- mImageLabel->setIcon(HbIcon(QIcon(snapshot)));
- } else {
- // do nothing
- }
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
- Launches "Not supported yet" notification.
- */
-void CxuiPostcaptureView::launchNotSupportedNotification()
-{
- CX_DEBUG_ENTER_FUNCTION();
- HbNotificationDialog::launchDialog("Notification", "Not supported yet");
CX_DEBUG_EXIT_FUNCTION();
}
@@ -626,6 +618,15 @@
{
CX_DEBUG_ENTER_FUNCTION();
+ if (!mFilename.isNull()) {
+ // post-capture started by activity, engine doesn't contain correct
+ // filename anymore so use the stored one
+ CX_DEBUG(("Using filename saved in activity"));
+ CX_DEBUG_EXIT_FUNCTION();
+ return mFilename;
+ }
+
+ CX_DEBUG(("Getting filename from engine"));
QString filename;
if (mEngine->mode() == Cxe::VideoMode) {
@@ -645,14 +646,6 @@
}
/*!
- Launches the Photos applications as a separate process
-*/
-void CxuiPostcaptureView::launchPhotosApp()
-{
- QProcess::startDetached(PhotosAppExe);
-}
-
-/*!
Sends current capture to client app and closes camera
*/
void CxuiPostcaptureView::select()
@@ -667,71 +660,126 @@
}
/*!
- Launches the Videos applications as a separate process
+* Handle exiting standby.
*/
-void CxuiPostcaptureView::launchVideosApp()
+void CxuiPostcaptureView::exitStandby()
{
- //Releasing cameda device in order to free
- //graphical memory
- releaseCamera();
- QProcess::startDetached(VideosAppExe);
+ CX_DEBUG_ENTER_FUNCTION();
+
+ // Common functionality first.
+ CxuiView::exitStandby();
+
+ //!@note We should not start timers until we receive the ShowEvent
+ showControls();
+
+ CX_DEBUG_EXIT_FUNCTION();
}
/*!
- Handle cases when we loose focus
+* Handle entering standby.
*/
-void CxuiPostcaptureView::handleFocusLost()
+void CxuiPostcaptureView::enterStandby()
{
CX_DEBUG_ENTER_FUNCTION();
- // we have lost focus
- releaseCamera();
+ // Common functionality (release camera).
+ CxuiView::enterStandby();
+
stopTimers();
hideControls();
CX_DEBUG_EXIT_FUNCTION();
}
+/*!
+ * Handle thumbnail received from ThumbnailManager.
+ *
+ * @param thumbnail Thumbnail as QPixmap
+ * @param clientData Not used
+ * @param id Thumbnail manager request id
+ * @param errorCode Error code
+ */
+void CxuiPostcaptureView::handleThumbnailReady(QPixmap thumbnail, void *clientData, int id, int errorCode)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ Q_UNUSED(clientData);
+ Q_UNUSED(id);
+
+ if (thumbnail.isNull()) {
+ CX_DEBUG(("Received null thumbnail from TNM, going to pre-capture. Error=%d", errorCode));
+ // null thumbnail, go to precapture
+ goToPrecaptureView();
+ } else if (mImageLabel) {
+ mImageLabel->setIcon(HbIcon(QIcon(thumbnail)));
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ Start the timers
+*/
void CxuiPostcaptureView::startTimers()
{
CX_DEBUG_ENTER_FUNCTION();
// we start timers only once in a given postcapture view session
- if (!mTimersStarted) {
- int postCaptureTimeout = 0;
- QString settingId;
-
- if (mEngine->mode() == ImageMode) {
- settingId = CxeSettingIds::STILL_SHOWCAPTURED;
- } else {
- settingId = CxeSettingIds::VIDEO_SHOWCAPTURED;
- }
-
- if (!CxuiServiceProvider::isCameraEmbedded()) {
- CxeError::Id err = mEngine->settings().get(settingId, postCaptureTimeout);
-
- if (postCaptureTimeout > 0 && err == CxeError::None) {
- mPostcaptureTimer.start(postCaptureTimeout);
- } else {
- // do nothing
- }
- }
-
- // start the hide control timer.
- mHideControlsTimeout.start(CXUI_HIDE_CONTROLS_TIMEOUT);
-
- //! @todo Temporarily disabling release timer because of
- // graphics memory problems related to releasing and reserving again.
- // mReleaseCameraTimer.start(CXUI_RELEASE_CAMERA_TIMEOUT);
- // mStopViewfinderTimer.start(CXUI_STOP_VIEWFINDER_TIMEOUT);
-
- // we make sure that timers are started only once in a given postcaptureview session
+ if(!mTimersStarted) {
+ startPostcaptureTimer();
+ startReleaseTimers();
mTimersStarted = true;
}
- // show controls when we get back focus
- showControls();
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ Start the timer to return to pre-capture view
+*/
+void CxuiPostcaptureView::startPostcaptureTimer()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (!mFilename.isNull()) {
+ // restored from activity, don't do post-capture timeout
+ CX_DEBUG_EXIT_FUNCTION();
+ return;
+ }
+
+ int postCaptureTimeout = 0;
+ QString settingId;
+
+ if (mEngine->mode() == ImageMode) {
+ settingId = CxeSettingIds::STILL_SHOWCAPTURED;
+ } else {
+ settingId = CxeSettingIds::VIDEO_SHOWCAPTURED;
+ }
+
+ if (!CxuiServiceProvider::isCameraEmbedded()) {
+ CxeError::Id err = mEngine->settings().get(settingId, postCaptureTimeout);
+
+ if (postCaptureTimeout > 0 && err == CxeError::None) {
+ mPostcaptureTimer.start(postCaptureTimeout);
+ } else {
+ // do nothing
+ }
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ Start the timers to stop viewfinder and release the camera
+*/
+void CxuiPostcaptureView::startReleaseTimers()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ // Release camera and stop viewfinder if user stays in postcapture long enough.
+ // Battery could otherwise drain fast.
+ mReleaseCameraTimer.start(CXUI_RELEASE_CAMERA_TIMEOUT);
+ mStopViewfinderTimer.start(CXUI_STOP_VIEWFINDER_TIMEOUT);
CX_DEBUG_EXIT_FUNCTION();
}
@@ -746,7 +794,7 @@
mPostcaptureTimer.stop();
mStopViewfinderTimer.stop();
- // Note: mTimersStarted is intentionally not reset here.
+ //!@note mTimersStarted is intentionally not reset here.
// Once the timers are stopped, they are not to be started again until
// we come from precapture view again.
// E.g. returning from background could otherwise restart the timers and
--- a/camerauis/cameraxui/cxui/src/cxuiprecaptureview.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuiprecaptureview.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -16,7 +16,6 @@
*/
#include <coemain.h>
-#include <QGraphicsSceneEvent>
#include <QProcess>
#include <QApplication>
#include <hbmainwindow.h>
@@ -55,48 +54,37 @@
#include "cxuisettingslider.h"
#include "cxuisettingsinfo.h"
#include "OstTraceDefinitions.h"
+#include "cxuiserviceprovider.h"
+#include "cxuizoomslider.h"
+#include "cxuifullscreenpopup.h"
+
#ifdef OST_TRACE_COMPILER_IN_USE
#include "cxuiprecaptureviewTraces.h"
#endif
-#include "cxuiserviceprovider.h"
-#include "cxuizoomslider.h"
-
-
-// CONSTANTS
-const int CXUI_HIDE_CONTROLS_TIMEOUT = 6000; // 6 seconds
-const QString PhotosAppExe = "photos.exe";
-const QString VideosAppExe = "videoplayer.exe";
+#include "cxegeotaggingtrail.h"
using namespace CxUiLayout;
using namespace CxUiSettings;
using namespace CxUiInternal;
-
// ---------------------------------------------------------------------------
// CxuiPrecaptureView::CxuiPrecaptureView
// Constructor
// ---------------------------------------------------------------------------
//
CxuiPrecaptureView::CxuiPrecaptureView(QGraphicsItem *parent) :
- HbView(parent),
- mEngine(0),
+ CxuiView(parent),
mViewfinder(0),
- mMainWindow(0),
- mDocumentLoader(0),
mDisplayHandler(0),
- mControlsVisible(false),
- mHideControlsTimeout(this),
- mSlider(0),
- mToolBar(0),
mSettingsGrid(0),
- mZoomVisible(false),
mWidgetsLoaded(false),
mSettingsDialog(NULL),
mSettingsDialogList(NULL),
- mKeyHandler(NULL),
mQualityIcon(NULL),
- mIndicators(NULL),
+ mGeoTaggingIndicatorIcon(NULL),
+ mFaceTrackingIcon(NULL),
+ mStandbyPopup(NULL),
mSettingsDialogHeading(NULL),
mSliderSettingsDialog(NULL),
mSliderSettingsDialogHeading(NULL),
@@ -118,22 +106,23 @@
CX_DEBUG_EXIT_FUNCTION();
}
-
+/**
+ * CxuiPrecaptureView::construct
+ * Construct-method handles initialisation tasks for this class.
+ * @param mainwindow
+ * @param engine
+ * @param documentLoader
+ * @param keyHandler
+ */
void CxuiPrecaptureView::construct(HbMainWindow *mainWindow, CxeEngine *engine,
CxuiDocumentLoader *documentLoader,
- CxuiCaptureKeyHandler * keyHandler)
+ CxuiCaptureKeyHandler * keyHandler,
+ HbActivityManager *activityManager)
{
CX_DEBUG_ENTER_FUNCTION();
- OstTrace0( camerax_performance, CXUIPRECAPTUREVIEW_CONSTRUCT, "msg: e_CX_PRECAPVIEW_CONST 1" );
+ OstTrace0(camerax_performance, CXUIPRECAPTUREVIEW_CONSTRUCT_1, "msg: e_CX_PRECAPVIEW_CONSTRUCT 1");
- CX_ASSERT_ALWAYS(mainWindow);
- CX_ASSERT_ALWAYS(engine);
- CX_ASSERT_ALWAYS(documentLoader);
-
- mMainWindow = mainWindow;
- mEngine = engine;
- mDocumentLoader = documentLoader;
- mKeyHandler = keyHandler;
+ CxuiView::construct(mainWindow, engine, documentLoader, keyHandler, activityManager);
mSettingsInfo = new CxuiSettingsInfo(engine);
CX_DEBUG_ASSERT(mSettingsInfo);
@@ -150,6 +139,9 @@
connect(&mEngine->viewfinderControl(), SIGNAL(stateChanged(CxeViewfinderControl::State, CxeError::Id)),
this, SLOT(handleVfStateChanged(CxeViewfinderControl::State, CxeError::Id)));
+ connect(&mEngine->geoTaggingTrail(), SIGNAL(stateChanged(CxeGeoTaggingTrail::State, CxeError::Id)),
+ this, SLOT(updateLocationIndicator(CxeGeoTaggingTrail::State, CxeError::Id)));
+
connect(&(mEngine->settings()), SIGNAL(settingValueChanged(const QString&,QVariant)),
this, SLOT(handleSettingValueChanged(const QString&, QVariant)));
@@ -167,30 +159,21 @@
connect(exitAction, SIGNAL(triggered()), CxuiServiceProvider::instance(), SLOT(sendFilenameToClientAndExit()));
setNavigationAction(exitAction);
}
- OstTrace0( camerax_performance, DUP1_CXUIPRECAPTUREVIEW_CONSTRUCT, "msg: e_CX_PRECAPVIEW_CONST 0" );
+
+ OstTrace0(camerax_performance, CXUIPRECAPTUREVIEW_CONSTRUCT_2, "msg: e_CX_PRECAPVIEW_CONSTRUCT 0");
QCoreApplication::instance()->installEventFilter(this);
CX_DEBUG_EXIT_FUNCTION();
}
-
-// ---------------------------------------------------------------------------
-// CxuiPrecaptureView::prepareWindow
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiPrecaptureView::prepareWindow()
+/*!
+* Is standby mode supported / needed by this view.
+* Pre-capture views implement / need standby mode and return true.
+* @return True if standby mode is supported, false otherwise.
+*/
+bool CxuiPrecaptureView::isStandbyModeSupported() const
{
- CX_DEBUG_ENTER_FUNCTION();
-
- if (mMainWindow) {
- mEngine->viewfinderControl().setWindow(mMainWindow->effectiveWinId());
- setFlag(QGraphicsItem::ItemIsFocusable);
- setFocusPolicy(Qt::StrongFocus);
- setFocus();
- }
-
- CX_DEBUG_EXIT_FUNCTION();
+ return true;
}
// ---------------------------------------------------------------------------
@@ -240,93 +223,6 @@
}
// ---------------------------------------------------------------------------
-// CxuiPrecaptureView::hideControls
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiPrecaptureView::hideControls()
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- hideItems(Hb::AllItems);
- hideZoom();
- mControlsVisible = false;
- if (mHideControlsTimeout.isActive()) {
- mHideControlsTimeout.stop();
- }
- hideToolbar();
-
- // show indicators when controls are hidden
- showIndicators();
-
- // give the keyboard focus back to the view
- // for the view to receive key events
- setFocus();
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-// ---------------------------------------------------------------------------
-// CxuiPrecaptureView::hideToolbar
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiPrecaptureView::hideToolbar()
-{
- CX_DEBUG_ENTER_FUNCTION();
- if (mToolBar) {
- mToolBar->hide();
- }
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-// ---------------------------------------------------------------------------
-// CxuiPrecaptureView::hideZoom
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiPrecaptureView::hideZoom()
-{
- if (mSlider) {
- mSlider->hide();
- }
- mZoomVisible = false;
-}
-
-// ---------------------------------------------------------------------------
-// CxuiPrecaptureView::showZoom
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiPrecaptureView::showZoom()
-{
- CX_DEBUG_ENTER_FUNCTION();
- if (mSlider) {
-
- // if maxVal has not been set yet, ask for new parameters from engine
- if (mSlider->maximum() <= 0) {
-
- // get the zoom range
- int min = mEngine->zoomControl().min();
- int max = mEngine->zoomControl().max();
-
- // only change values if they are acceptable and have changed
- if ((max - min > 0) && ((mSlider->maximum() != max) || (mSlider->minimum() != min))) {
- mSlider->setRange(min, max);
- }
- }
-
- // show zoom only if the slider has acceptable value
- if (mSlider->maximum() > 0) {
- mSlider->show();
- }
- }
-
- mZoomVisible = true;
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-// ---------------------------------------------------------------------------
// CxuiPrecaptureView::toggleZoom
//
// ---------------------------------------------------------------------------
@@ -340,77 +236,6 @@
}
}
-// ---------------------------------------------------------------------------
-// CxuiPrecaptureView::hideIndicators
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiPrecaptureView::hideIndicators()
-{
- if (mIndicators) {
- mIndicators->hide();
- }
-}
-
-// ---------------------------------------------------------------------------
-// CxuiPrecaptureView::showIndicators
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiPrecaptureView::showIndicators()
-{
- if (mIndicators) {
- mIndicators->show();
- }
-}
-
-// ---------------------------------------------------------------------------
-// CxuiPrecaptureView::showControls
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiPrecaptureView::showControls()
-{
- if (mEngine) {
- bool videoCases = (mEngine->videoCaptureControl().state() == CxeVideoCaptureControl::Recording ||
- mEngine->videoCaptureControl().state() == CxeVideoCaptureControl::Paused);
-
- if (mEngine->isEngineReady() || videoCases) {
- // show toolbar
- showToolbar();
- // show zoom
- showZoom();
- // show titlepane
- showItems(Hb::AllItems);
-
- // hide indicators when controls are shown
- hideIndicators();
-
- mHideControlsTimeout.start();
- mControlsVisible = true;
- }
- }
-}
-
-// ---------------------------------------------------------------------------
-// CxuiPrecaptureView::showToolbar
-// shows toolbar
-// ---------------------------------------------------------------------------
-//
-void CxuiPrecaptureView::showToolbar()
-{
-
- CX_DEBUG_ENTER_FUNCTION();
-
- // toolbar pointer is missing if widgets for the view have not been loaded
- // from the DocML
- if (mToolBar) {
- mToolBar->show();
- }
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
/*
* Event filter which filters tool bar mouse events and
@@ -419,17 +244,23 @@
bool CxuiPrecaptureView::eventFilter(QObject *object, QEvent *event)
{
- Q_UNUSED(object)
-
bool eventWasConsumed = false;
switch (event->type())
{
case QEvent::GraphicsSceneMouseRelease:
- mHideControlsTimeout.start();
+ if (mStandbyPopup) {
+ mStandbyPopup->handleMouseRelease();
+ } else {
+ mHideControlsTimeout.start();
+ }
break;
case QEvent::GraphicsSceneMousePress:
- mHideControlsTimeout.stop();
+ if (object == mStandbyPopup) {
+ mStandbyPopup->handleMousePress();
+ } else {
+ mHideControlsTimeout.stop();
+ }
break;
default:
break;
@@ -452,27 +283,7 @@
// call load widgets to load app DocML and get the pointers to needed widgets
loadWidgets();
}
-
- if (mControlsVisible) {
- hideControls();
- } else {
- showControls();
- }
-}
-
-
-// ---------------------------------------------------------------------------
-// CxuiPrecaptureView::mousePressEvent
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiPrecaptureView::mousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- //! @todo temporary workaround for title bar mouse event handling bug
- if (event->type() == QEvent::GraphicsSceneMousePress && event->scenePos().y() > 70) {
- toggleControls();
- event->accept();
- }
+ CxuiView::toggleControls();
}
// ---------------------------------------------------------------------------
@@ -582,16 +393,6 @@
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiPrecaptureView::releaseCamera
-// ---------------------------------------------------------------------------
-void CxuiPrecaptureView::releaseCamera()
-{
- CX_DEBUG_ENTER_FUNCTION();
- mEngine->cameraDeviceControl().release();
- CX_DEBUG_EXIT_FUNCTION();
-}
-
// ---------------------------------------------------------------------------
// CxuiPrecaptureView::initCamera
@@ -631,18 +432,48 @@
CX_DEBUG_EXIT_FUNCTION();
}
-
-/*
- * CxuiPrecaptureView::handleFocusGained
- */
-void CxuiPrecaptureView::handleFocusGained()
+/*!
+* Slot for entering standby mode.
+* Show standby canvas in addition to base class implementation.
+* @sa CxuiView::enterStandby()
+*/
+void CxuiPrecaptureView::enterStandby()
{
CX_DEBUG_ENTER_FUNCTION();
- // Set the window size and handle again.
- prepareWindow();
+ // Release camera right away to avoid any problems with GPU memory.
+ CxuiView::enterStandby();
+
+ // If this view is still the current view, show popup.
+ // If we moved to precapture view because (error) standby during capturing,
+ // don't try show the popup.
+ if (mMainWindow->currentView() == this) {
+ // Show standby canvas / popup.
+ if (!mStandbyPopup) {
+ mStandbyPopup = CxuiFullScreenPopup::create(scene(), hbTrId("txt_cam_info_camera_in_standby_mode"));
+ }
+ mStandbyPopup->show();
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Slot for exiting standby mode.
+* Hide the standby canvas and re-prepare camera.
+* @sa CxuiView::exitStandby()
+*/
+void CxuiPrecaptureView::exitStandby()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ CxuiView::exitStandby();
+
+ if (mStandbyPopup) {
+ mStandbyPopup->hide();
+ delete mStandbyPopup;
+ mStandbyPopup = NULL;
+ }
+
initCamera();
-
CX_DEBUG_EXIT_FUNCTION();
}
@@ -671,15 +502,21 @@
*/
void CxuiPrecaptureView::prepareToCloseDialog(HbAction *action)
{
- if (!action) {
- return;
- }
-
// Check if the dialog was started from grid, and show the grid now if needed.
// Autofocus key-press will clear the action to disable showing the grid.
- QString fromGrid = action->property(PROPERTY_KEY_SETTING_GRID).toString();
- if (fromGrid.compare(QString(PROPERTY_KEY_TRUE)) == 0 ) {
- showSettingsGrid();
+ if (action) {
+ QString fromGrid = action->property(PROPERTY_KEY_SETTING_GRID).toString();
+ if (fromGrid.compare(QString(PROPERTY_KEY_TRUE)) == 0 ) {
+ showSettingsGrid();
+ }
+ // disable geotagging disclaimer after geotagging setting is triggered from FirstTimeUse dialog
+ QString settingId = action->property(PROPERTY_KEY_SETTING_ID).toString();
+ int value = Cxe::GeoTaggingDisclaimerDisabled;
+ mEngine->settings().get(CxeSettingIds::GEOTAGGING_DISCLAIMER, value);
+ if (settingId == CxeSettingIds::GEOTAGGING && value == Cxe::GeoTaggingDisclaimerEnabled) {
+ // disable geotagging first-time-use dialog
+ disableGeotaggingDisclaimer();
+ }
}
// Clear the starter actions to be sure they are not reused.
@@ -689,6 +526,16 @@
if (mSliderSettingsDialog) {
mSliderSettingsDialog->setStarterAction(NULL);
}
+
+ // Dialog will be deleted automatically when closed
+ // The pointers may become invalid at any time
+ mSettingsDialog = NULL;
+ mSettingsDialogList = NULL;
+ mSettingsDialogHeading = NULL;
+
+ mSliderSettingsDialog = NULL;
+ mSliderSettingsDialogHeading = NULL;
+ mSettingsSlider = NULL;
}
@@ -748,6 +595,8 @@
return;
}
+ hideControls();
+
QString key = action->property(PROPERTY_KEY_SETTING_ID).toString();
CX_DEBUG(("settingsKey=%s", key.toAscii().constData()));
@@ -794,7 +643,9 @@
// Adjust position and show the dialog.
mSettingsDialog->setPreferredPos(getDialogPosition(), HbPopup::BottomRightCorner);
+ mSettingsDialog->setAttribute(Qt::WA_DeleteOnClose, true);
mSettingsDialog->show();
+
}
} else {
launchNotSupportedNotification();
@@ -856,6 +707,8 @@
return;
}
+ hideControls();
+
QString key = action->property(PROPERTY_KEY_SETTING_ID).toString();
CX_DEBUG(("settingsKey=%s", key.toAscii().constData()));
@@ -903,7 +756,9 @@
// Adjust position and show the dialog.
mSliderSettingsDialog->setFrameType(HbPopup::Weak);
mSliderSettingsDialog->setPreferredPos(getDialogPosition(), HbPopup::BottomRightCorner);
+ mSliderSettingsDialog->setAttribute(Qt::WA_DeleteOnClose, true);
mSliderSettingsDialog->show();
+
}
} else {
launchNotSupportedNotification();
@@ -912,42 +767,6 @@
CX_DEBUG_EXIT_FUNCTION();
}
-void CxuiPrecaptureView::launchPhotosApp()
-{
- QProcess::startDetached(PhotosAppExe);
-}
-
-/*!
- * Launching Videos application as a separate process
- */
-void CxuiPrecaptureView::launchVideosApp()
-{
- //Releasing cameda device in order to free
- //graphical memory
- releaseCamera();
- QProcess::startDetached(VideosAppExe);
-}
-
-/*!
-* Show "not supported" notification.
-*/
-void CxuiPrecaptureView::launchNotSupportedNotification()
-{
- CX_DEBUG_ENTER_FUNCTION();
- HbNotificationDialog::launchDialog("Notification", "Not supported yet");
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Show "Disk full" notification.
-*/
-void CxuiPrecaptureView::launchDiskFullNotification()
-{
- CX_DEBUG_ENTER_FUNCTION();
- HbMessageBox::warning(hbTrId("txt_cam_info_memory_full"));
- CX_DEBUG_EXIT_FUNCTION();
-}
-
/**
* Show settings grid.
*/
@@ -980,80 +799,6 @@
CX_DEBUG_EXIT_FUNCTION();
}
-/**
-* Get if postcapture view should be shown or not.
-* Postcapture view may be shown for a predefined time or
-* until user dismisses it, or it may be completely disabled.
-*/
-bool CxuiPrecaptureView::isPostcaptureOn() const
-{
- CX_DEBUG_ENTER_FUNCTION();
- if (CxuiServiceProvider::isCameraEmbedded()) {
- // always show post capture in embedded mode
- return true;
- }
-
- // Read the value from settings. Ignoring reading error.
- // On error (missing settings) default to "postcapture on".
- int showPostcapture(-1);
- QString key;
- if(mEngine) {
- if (mEngine->mode() == Cxe::ImageMode) {
- key = CxeSettingIds::STILL_SHOWCAPTURED;
- } else {
- key = CxeSettingIds::VIDEO_SHOWCAPTURED;
- }
- mEngine->settings().get(key, showPostcapture);
- }
-
- CX_DEBUG_EXIT_FUNCTION();
- return showPostcapture != 0; // 0 == no postcapture
-}
-
-/*!
-* Adding zoom buttons to the slider
-* \param slider Pointer to the slider object, where the buttons will be added
-*/
-void CxuiPrecaptureView::addIncreaseDecreaseButtons(CxuiZoomSlider *slider)
-{
- // get current slider elements
- QList<QVariant> elements = slider->sliderElements();
-
- // add increase and decrease elements to the slider
- elements << HbSlider::IncreaseElement << HbSlider::DecreaseElement;
- slider->setSliderElements(elements);
-
- // set icons for the increase and decrease element
- slider->setElementIcon(HbSlider::DecreaseElement , HbIcon("qtg_mono_minus"));
- slider->setElementIcon(HbSlider::IncreaseElement , HbIcon("qtg_mono_plus"));
-}
-
-
-/*!
-* Function can be used to create a graphics item and setting it as a background
-* item for HbWidget. graphicName refers to system wide graphic name. Given graphic
-* can consist of one, three or nine pieces. Nine piece graphics are used by default.
-* See HbFrameDrawer documentation for graphic naming.
-*/
-void CxuiPrecaptureView::createWidgetBackgroundGraphic(HbWidget *widget,
- const QString &graphicName,
- HbFrameDrawer::FrameType frameType)
-{
- if (widget) {
- HbFrameDrawer *drawer = new HbFrameDrawer(graphicName, frameType);
-
- if (drawer) {
- HbFrameItem *backgroundItem = new HbFrameItem(drawer, widget);
- if (backgroundItem) {
- // set item to fill the whole widget
- backgroundItem->setGeometry(QRectF(QPointF(0, 0), widget->size()));
- backgroundItem->setZValue(0);
- widget->setBackgroundItem(backgroundItem);
- }
- }
- }
-}
-
/*!
* Returns dialogs bottom right corner
*/
@@ -1103,33 +848,6 @@
return icon;
}
-/*!
- Update the quality indicator
-*/
-void CxuiPrecaptureView::updateQualityIcon()
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- if (mQualityIcon && mEngine) {
- QString key = "";
- QString icon = "";
- int currentValue = -1;
-
- if (mEngine->mode() == Cxe::VideoMode) {
- key = CxeSettingIds::VIDEO_QUALITY;
- } else {
- key = CxeSettingIds::IMAGE_QUALITY;
- }
-
- mEngine->settings().get(key, currentValue);
- icon = getSettingItemIcon(key, currentValue);
-
- mQualityIcon->setIcon(HbIcon(icon));
- }
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
void CxuiPrecaptureView::handleSettingValueChanged(const QString& key, QVariant newValue)
{
CX_DEBUG_ENTER_FUNCTION();
@@ -1138,4 +856,91 @@
CX_DEBUG_EXIT_FUNCTION();
}
+/*!
+ * Slot to keep track of state changes in GeotaggingLocation trail. We use these states to update
+ * the UI by enabling right icon.
+ */
+void CxuiPrecaptureView::updateLocationIndicator(CxeGeoTaggingTrail::State newState, CxeError::Id error)
+{
+ CX_DEBUG( ("CxuiPrecaptureView::updateLocationIndicator <> error: %d ", error));
+
+ if (mGeoTaggingIndicatorIcon) {
+ if (newState == CxeGeoTaggingTrail::DataAvailable && error == CxeError::None) {
+ CX_DEBUG(("CxuiPrecaptureView::updateLocationIndicator GPS data available, showing icon"));
+ mGeoTaggingIndicatorIcon->setIcon(HbIcon("qtg_mono_geotag"));
+ mGeoTaggingIndicatorIcon->show();
+ } else {
+ CX_DEBUG(("CxuiPrecaptureView::handleIconChanged GPS data not available"));
+ mGeoTaggingIndicatorIcon->hide();
+ }
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+/*!
+* Lauches "Geotagging first-time use" notification to the user
+*/
+void CxuiPrecaptureView::launchGeoTaggingDisclaimerDialog()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ HbMessageBox *ftuMessageBox = new HbMessageBox(hbTrId("txt_cam_info_captured_photos_and_videos_will_be_ta"),
+ HbMessageBox::MessageTypeInformation);
+
+ HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"));
+ HbAction *settingsAction = new HbAction(hbTrId("txt_cam_opt_general_settings"));
+
+ // connecting signals for dialog's actions
+ connect(okAction,
+ SIGNAL(triggered()),
+ this,
+ SLOT(disableGeotaggingDisclaimer()));
+
+ connect(settingsAction,
+ SIGNAL(triggered()),
+ this,
+ SLOT(launchGeoTaggingSetting()));
+
+ // adding buttons to the information message
+ ftuMessageBox->setStandardButtons(HbMessageBox::NoButton);
+ ftuMessageBox->addAction(okAction);
+ ftuMessageBox->addAction(settingsAction);
+
+ ftuMessageBox->setAttribute(Qt::WA_DeleteOnClose, true);
+ ftuMessageBox->show();
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Slot that disables Geotagging first-time use notification.
+*/
+void CxuiPrecaptureView::disableGeotaggingDisclaimer()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ // disable geotagging first-time-use dialog
+ mEngine->settings().set(CxeSettingIds::GEOTAGGING_DISCLAIMER, Cxe::GeoTaggingDisclaimerDisabled);
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+/*!
+* Slot that launches geotagging setting dialog.
+*/
+void CxuiPrecaptureView::launchGeoTaggingSetting()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ QObject *action = sender();
+ action->setProperty(PROPERTY_KEY_SETTING_ID, CxeSettingIds::GEOTAGGING);
+ launchSettingsDialog(action);
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
// end of file
+
--- a/camerauis/cameraxui/cxui/src/cxuiscenemodeview.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuiscenemodeview.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -15,6 +15,7 @@
*
*/
#include <hbframeitem.h>
+#include <hbactivitymanager.h>
#include "cxenamespace.h"
#include "cxesettings.h"
@@ -49,13 +50,10 @@
* Constructor
*/
CxuiSceneModeView::CxuiSceneModeView(QGraphicsItem *parent) :
- HbView(parent),
- mMainWindow(NULL),
+ CxuiView(parent),
mSettingsInfo(NULL),
- mEngine(NULL),
- mDocumentLoader(NULL),
- mCaptureKeyHandler(NULL),
- mScenesBackground(NULL)
+ mScenesBackground(NULL),
+ mScenesHeading(NULL)
{
CX_DEBUG_IN_FUNCTION();
}
@@ -80,20 +78,19 @@
void CxuiSceneModeView::construct(HbMainWindow *mainwindow,
CxeEngine *engine,
CxuiDocumentLoader *documentLoader,
- CxuiCaptureKeyHandler *keyHandler)
+ CxuiCaptureKeyHandler *keyHandler,
+ HbActivityManager *activityManager)
{
CX_DEBUG_ENTER_FUNCTION();
+ CxuiView::construct(mainwindow, engine, documentLoader, keyHandler, activityManager);
- mMainWindow = mainwindow;
- mDocumentLoader = documentLoader;
- mCaptureKeyHandler = keyHandler;
- mEngine = engine;
mSettingsInfo = new CxuiSettingsInfo(mEngine);
setContentFullScreen(true);
loadDefaultWidgets();
- mCameraReleaseTimer.setInterval(CXUI_SCENES_CAMERA_TIMEOUT);
- connect(&mCameraReleaseTimer, SIGNAL(timeout()), this, SLOT(releaseCameraHw()), Qt::UniqueConnection);
+ mCameraReleaseTimer.setInterval(CXUI_SCENES_CAMERA_TIMEOUT);
+ mCameraReleaseTimer.setSingleShot(true);
+ connect(&mCameraReleaseTimer, SIGNAL(timeout()), this, SLOT(releaseCamera()), Qt::UniqueConnection);
CX_DEBUG_EXIT_FUNCTION();
}
@@ -108,21 +105,27 @@
QGraphicsWidget *widget = NULL;
- widget = mDocumentLoader->findWidget(SCENE_VIEW_CONTAINER);
+ widget = mDocumentLoader->findWidget(SCENE_MODE_VIEW_CONTAINER);
mScenesContainer = qobject_cast<HbWidget *> (widget);
+ mScenesHeading = qobject_cast<HbLabel *>(
+ mDocumentLoader->findWidget(SCENE_MODE_VIEW_HEADING_WIDGET));
+ CX_ASSERT_ALWAYS(mScenesHeading);
+
//Now let's retreive the pointer to icon widget
- widget = mDocumentLoader->findWidget(SCENE_VIEW_BG_IMAGE);
+ widget = mDocumentLoader->findWidget(SCENE_MODE_VIEW_BG_IMAGE);
mScenesBackground = qobject_cast<HbLabel *> (widget);
- widget = mDocumentLoader->findWidget(SCENE_VIEW_BG_IMAGE2);
+ widget = mDocumentLoader->findWidget(SCENE_MODE_VIEW_BG_IMAGE2);
mScenesBackground2 = qobject_cast<HbLabel *> (widget);
//Assuming that the automatic scene mode is always the default one
CX_DEBUG(("CxuiSceneModeView::loadDefaultWidgets -> Now setting default image"));
- mScenesBackground->setIcon(HbIcon(CXUI_SCENES_AUTOMATIC_IMAGE));
+ HbIcon background(CXUI_SCENES_AUTOMATIC_IMAGE);
+ background.setMirroringMode(HbIcon::LayoutDirection);
+ mScenesBackground->setIcon(background);
- widget = mDocumentLoader->findWidget(SCENE_VIEW_RADIOBUTTONS);
+ widget = mDocumentLoader->findWidget(SCENE_MODE_VIEW_RADIOBUTTONS);
mScenesList = qobject_cast<CxuiSettingRadioButtonList *> (widget);
mTransitionAnimation = new QPropertyAnimation(mScenesBackground2, "opacity");
@@ -130,6 +133,10 @@
createWidgetBackgroundGraphic(mScenesContainer, TRANSPARENT_BACKGROUND_GRAPHIC);
+ //!@todo: View flags property is missing from HbView,
+ // so can't properly hide title bar / status bar there.
+ hideControls();
+
connectSignals();
CX_DEBUG_EXIT_FUNCTION();
@@ -145,31 +152,6 @@
}
/*!
-* Function can be used to create a graphics item and setting it as a background
-* item for HbWidget. graphicName refers to system wide graphic name. Given graphic
-* can consist of one, three or nine pieces. Nine piece graphics are used by default.
-* See HbFrameDrawer documentation for graphic naming.
-*/
-void CxuiSceneModeView::createWidgetBackgroundGraphic(HbWidget *widget,
- const QString &graphicName,
- HbFrameDrawer::FrameType frameType)
-{
- if (widget) {
- HbFrameDrawer *drawer = new HbFrameDrawer(graphicName, frameType);
-
- if (drawer) {
- HbFrameItem *backgroundItem = new HbFrameItem(drawer, widget);
- if (backgroundItem) {
- // set item to fill the whole widget
- backgroundItem->setGeometry(QRectF(QPointF(0, 0), widget->size()));
- backgroundItem->setZValue(0);
- widget->setBackgroundItem(backgroundItem);
- }
- }
- }
-}
-
-/*!
* This public method assumes that the view is already properly constructed
*/
void CxuiSceneModeView::loadBackgroundImages()
@@ -184,10 +166,16 @@
mSettingPairList = data.mSettingPairList;
mScenesList->init(&data);
+ if (mScenesHeading) {
+ mScenesHeading->setPlainText(data.mHeading);
+ }
+
if (mScenesBackground) {
QString sceneId;
mEngine->settings().get(data.mSettingId, sceneId);
- mScenesBackground->setIcon(HbIcon(backgroundForScene(sceneId)));
+ HbIcon background(backgroundForScene(sceneId));
+ background.setMirroringMode(HbIcon::LayoutDirection);
+ mScenesBackground->setIcon(background);
} else {
//First time displaying a list
//Assuming that the automatic scene mode is always the default one and is on top of the list
@@ -197,6 +185,28 @@
}
/*!
+ * Save view state to activity. Scene mode view doesn't have it's own activity, just save
+ * correct pre-capture view.
+ */
+void CxuiSceneModeView::saveActivity()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ QVariantMap data;
+ QVariantHash params;
+
+ //@todo: add pre-capture icon as screenshot
+ if (mEngine->mode() == Cxe::ImageMode) {
+ mActivityManager->removeActivity(CxuiActivityIds::STILL_PRECAPTURE_ACTIVITY);
+ mActivityManager->addActivity(CxuiActivityIds::STILL_PRECAPTURE_ACTIVITY, data, params);
+ } else {
+ mActivityManager->removeActivity(CxuiActivityIds::VIDEO_PRECAPTURE_ACTIVITY);
+ mActivityManager->addActivity(CxuiActivityIds::VIDEO_PRECAPTURE_ACTIVITY, data, params);
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
* Handle selecting value in scene list.
*/
void CxuiSceneModeView::handleSceneRadiobuttonPress(int index)
@@ -205,7 +215,9 @@
CxUiSettings::SettingItem item = mSettingPairList.at(index);
QString sceneId = item.mValue.toString();
- mScenesBackground2->setIcon(HbIcon(backgroundForScene(sceneId)));
+ HbIcon background(backgroundForScene(sceneId));
+ background.setMirroringMode(HbIcon::LayoutDirection);
+ mScenesBackground2->setIcon(background);
startBackgroundTransition();
CX_DEBUG_EXIT_FUNCTION();
}
@@ -218,25 +230,25 @@
QString CxuiSceneModeView::backgroundForScene(const QString& sceneId)
{
//!@todo: This mapping should be added to the setting xml.
- if (sceneId == CxeSettingIds::IMAGE_SCENE_AUTO) {
+ if (sceneId == Cxe::IMAGE_SCENE_AUTO) {
return CXUI_SCENES_AUTOMATIC_IMAGE;
- } else if (sceneId == CxeSettingIds::IMAGE_SCENE_PORTRAIT) {
+ } else if (sceneId == Cxe::IMAGE_SCENE_PORTRAIT) {
return CXUI_SCENES_PORTRAIT_IMAGE;
- } else if (sceneId == CxeSettingIds::IMAGE_SCENE_SCENERY) {
+ } else if (sceneId == Cxe::IMAGE_SCENE_SCENERY) {
return CXUI_SCENES_LANDSCAPE_IMAGE;
- } else if (sceneId == CxeSettingIds::IMAGE_SCENE_MACRO) {
+ } else if (sceneId == Cxe::IMAGE_SCENE_MACRO) {
return CXUI_SCENES_CLOSEUP_IMAGE;
- } else if (sceneId == CxeSettingIds::IMAGE_SCENE_SPORTS) {
+ } else if (sceneId == Cxe::IMAGE_SCENE_SPORTS) {
return CXUI_SCENES_SPORT_IMAGE;
- } else if (sceneId == CxeSettingIds::IMAGE_SCENE_NIGHT) {
+ } else if (sceneId == Cxe::IMAGE_SCENE_NIGHT) {
return CXUI_SCENES_NIGHT_IMAGE;
- } else if (sceneId == CxeSettingIds::IMAGE_SCENE_NIGHTPORTRAIT) {
+ } else if (sceneId == Cxe::IMAGE_SCENE_NIGHTPORTRAIT) {
return CXUI_SCENES_NIGHT_PORTRAIT_IMAGE;
- } else if (sceneId == CxeSettingIds::VIDEO_SCENE_AUTO) {
+ } else if (sceneId == Cxe::VIDEO_SCENE_AUTO) {
return CXUI_SCENES_AUTOMATIC_IMAGE;
- } else if (sceneId == CxeSettingIds::VIDEO_SCENE_LOWLIGHT) {
+ } else if (sceneId == Cxe::VIDEO_SCENE_LOWLIGHT) {
return CXUI_SCENES_LOW_LIGHT_IMAGE;
- } else if (sceneId == CxeSettingIds::VIDEO_SCENE_NIGHT) {
+ } else if (sceneId == Cxe::VIDEO_SCENE_NIGHT) {
return CXUI_SCENES_NIGHT_IMAGE;
} else {
return "";
@@ -302,6 +314,24 @@
}
/*!
+* Allow showing UI controls?
+* Title bar and other UI chrome is never shown in scene mode view.
+*/
+bool CxuiSceneModeView::allowShowControls() const
+{
+ return false;
+}
+
+/*!
+ * Play feedback when touching view outside of any widget?
+ * Feedback is not played in scene mode view.
+ */
+bool CxuiSceneModeView::isFeedbackEnabled() const
+{
+ return false;
+}
+
+/*!
* Slot to handle capture key full press.
*/
void CxuiSceneModeView::handleCaptureKeyPressed()
@@ -329,22 +359,10 @@
CX_DEBUG_ENTER_FUNCTION();
mScenesList->handleClose();
mScenesBackground->setIcon(HbIcon());
- // Make sure engine prepares for new image/video if necessary
- mEngine->initMode(mEngine->mode());
+ mScenesHeading = NULL;
emit viewCloseEvent();
CX_DEBUG_EXIT_FUNCTION();
}
-/*!
-* Slot to handle camera hw release timeout
-*/
-void CxuiSceneModeView::releaseCameraHw()
-{
- CX_DEBUG_ENTER_FUNCTION();
- mCameraReleaseTimer.stop();
- mEngine->cameraDeviceControl().release();
- CX_DEBUG_EXIT_FUNCTION();
-}
-
// end of file
--- a/camerauis/cameraxui/cxui/src/cxuiselftimer.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuiselftimer.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -18,6 +18,10 @@
#include <hblabel.h>
#include <hbpushbutton.h>
+#ifdef Q_OS_SYMBIAN
+#include <ProfileEngineSDKCRKeys.h>
+#endif
+
#include "cxuiselftimer.h"
#include "cxutils.h"
#include "cxuienums.h"
@@ -37,9 +41,12 @@
*/
// constants
+
const int CONTINUOUS_POSTCAPTURE = -1;
const int UNKNOWN = -99;
+const static QString SELFTIMER_SOUND = "z:\\system\\sounds\\digital\\selftimer.wav";
+
CxuiSelfTimer::CxuiSelfTimer(CxeSettings &settings)
: mDelay(-1),
mCounter(0),
@@ -49,13 +56,38 @@
mTimerLabel(NULL),
mCancelButton(NULL),
mStartButton(NULL),
- mSettings(settings)
+ mSettings(settings),
+ mSound(SELFTIMER_SOUND),
+ mUseSound(true)
{
CX_DEBUG_ENTER_FUNCTION();
connect(&mTimer, SIGNAL(timeout()), this, SLOT(timeout()));
mTimer.setSingleShot(false);
+ // connect to capture sound signal in order to monitor
+ // warning tone changes
+ connect(&mSettings,
+ SIGNAL(settingValueChanged(long int, unsigned long int, QVariant)),
+ this, SLOT(enableSound(long int, unsigned long int, QVariant)));
+
+ // get initial warning tone value from profile
+ QVariant value(0);
+
+#ifdef Q_OS_SYMBIAN
+ // get current profile setting for using camerasound
+ // camera sound follows warning tone setting
+ unsigned long int key = KProEngActiveWarningTones;
+ long int uid = KCRUidProfileEngine.iUid;
+ mSettings.get(uid, key, Cxe::Repository, value);
+#endif
+
+ // possible values are:
+ // 0 -> warning tones off
+ // 1 -> warning tones on
+ mUseSound = (value.toInt() == 1);
+ CX_DEBUG(("Warning tones enabled [%d]", value.toInt()));
+
CX_DEBUG_EXIT_FUNCTION();
}
@@ -124,6 +156,14 @@
return mTimer.isActive();
}
+/*!
+ Returns current timeout value of selftimer.
+ */
+int CxuiSelfTimer::getTimeout() const
+{
+ return mDelay;
+}
+
/*! Slot for canceling the selftimer.
Disables selftimer, sets back the postcapturetimeout if it
has been changed by selftimer and emits signal to notify interested
@@ -173,9 +213,13 @@
// so the UI seems to update smoother.
updateWidgets();
+ playSound();
+
// Check if timer ran out
if (mCounter >= mDelay) {
mTimer.stop();
+ mSound.stop();
+ hideWidgets();
emit timerFinished();
}
@@ -183,14 +227,37 @@
}
/*!
- Slot for resetting the selftimer countdown. Countdown is stopped,
- and set back to starting value. Start button is set enabled.
-
+ * Play selftimer sound.
*/
-void CxuiSelfTimer::reset()
+void CxuiSelfTimer::playSound()
{
CX_DEBUG_ENTER_FUNCTION();
- reset(true);
+
+ // play sounds only if warning tones are enabled
+ if (mUseSound) {
+ CX_DEBUG(("play"));
+
+ int timeLeft = mDelay - mCounter;
+
+ if (timeLeft <= 3) {
+ // play as fast as we can
+ if (mSound.isFinished()) {
+ mSound.setLoops(-1);
+ mSound.play();
+ }
+ } else if (timeLeft <= 10) {
+ // play every second
+ mSound.setLoops(1);
+ mSound.play();
+ } else {
+ // play once every two seconds
+ if (mCounter%2) {
+ mSound.setLoops(1);
+ mSound.play();
+ }
+ }
+ }
+
CX_DEBUG_EXIT_FUNCTION();
}
@@ -221,6 +288,7 @@
// start countdown
mCounter = 0;
+ playSound();
mTimer.start(1000); // 1000 milliseconds == 1 second
CX_DEBUG_EXIT_FUNCTION();
@@ -262,6 +330,7 @@
{
// Stop timer and reset counter.
mTimer.stop();
+ mSound.stop();
mCounter = 0;
// Set start buttonback to enabled.
@@ -320,6 +389,29 @@
mWidgetContainer->hide();
}
-
+}
+/*!
+ * Enables or disables the selftimer sound.
+ * \param uid UID of the changed setting
+ * \param key Key of the changed setting
+ * \param value New setting value
+ */
+void CxuiSelfTimer::enableSound(long int uid, unsigned long int key, QVariant value)
+{
+#ifdef Q_OS_SYMBIAN
+ // selftimer is only interested in warning tones
+ if (uid == KCRUidProfileEngine.iUid && key == KProEngActiveWarningTones) {
+ CX_DEBUG_IN_FUNCTION();
+ // possible values are:
+ // 0 -> warning tones off
+ // 1 -> warning tones on
+ mUseSound = (value.toInt() == 1);
+ }
+#else
+ Q_UNUSED(uid);
+ Q_UNUSED(key);
+ Q_UNUSED(value);
+#endif
}
+
--- a/camerauis/cameraxui/cxui/src/cxuisettingradiobuttonlist.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuisettingradiobuttonlist.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -38,7 +38,9 @@
connect(this, SIGNAL(itemSelected(int)), this, SLOT(handleItemSelected(int)));
}
-
+/*!
+* Init contents of the listbox and select current setting value.
+*/
void CxuiSettingRadioButtonList::init(CxUiSettings::RadioButtonListParams *data)
{
// first we reset the model and clear any previous data
@@ -67,29 +69,74 @@
setSettingId(data->mSettingId);
setListBoxType(data->mListboxType);
+
+ // Store the original setting value and focus matching item.
+ QString value;
+ mEngine->settings().get(mSettingId, value);
+ CX_DEBUG(("CxuiSettingRadioButtonList - original value: [%s]", qPrintable(value)));
+ setOriginalSelectedItemByValue(QVariant(value));
+ }
+}
+
+/*!
+ * Sets the original selection of list by value. Can be used to override value read from
+ * CxeSettings or used to remember previously selected value in case of setting that is
+ * not read from CxeSettings (e.g. selftimer)
+ */
+void CxuiSettingRadioButtonList::setOriginalSelectedItemByValue(const QVariant &value)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ // Find the index of given value among setting values.
+ // Default to first item, if given value is not found.
+ int index = mSettingValues.indexOf(QVariant(value));
+ if (index < 0) {
+ CX_DEBUG(("[WARNING] Value [%s] not found, selecting first item", qPrintable(value.toString())));
+ index = 0;
}
+ // Store the original value.
+ mOriginalIndex = index;
+ // Select the index with current value item.
+ setSelected(index);
+ // Ensure that currently selected item is visible.
+ scrollTo(currentIndex());
+
+ CX_DEBUG_EXIT_FUNCTION();
}
+/*!
+* Set list texts.
+* @param values List of the texts.
+*/
void CxuiSettingRadioButtonList::setItems(const QStringList &values)
{
mListModel->setItems(values);
}
+/*!
+* Set the type of this list.
+* @param type Type identifier, SingleLine or TwoLine.
+*/
void CxuiSettingRadioButtonList::setListBoxType(int type)
{
mListModel->setListBoxType(type);
}
-
+/*!
+* Set id of the setting this list represents.
+* @param id Id of the setting.
+*/
void CxuiSettingRadioButtonList::setSettingId(const QString &id)
{
// Selected item is updated, when this list is shown.
mSettingId = id;
}
-
-
+/*!
+* Handle selecting an item.
+* @param index Index of the selected item in list.
+*/
void CxuiSettingRadioButtonList::handleItemSelected(int index)
{
CX_DEBUG_ENTER_FUNCTION();
@@ -102,41 +149,6 @@
CX_DEBUG_EXIT_FUNCTION();
}
-void CxuiSettingRadioButtonList::showEvent(QShowEvent *event)
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- initOriginalSelectedItem();
- QGraphicsWidget::showEvent(event);
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/*!
-* Get the value currently active in settings.
-*/
-void CxuiSettingRadioButtonList::initOriginalSelectedItem()
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- QString value;
- int err = mEngine->settings().get(mSettingId, value);
- CX_DEBUG(("CxuiSettingRadioButtonList - original value: [%s]", value.toAscii().data()));
-
- int index = 0;
-
- if (err == CxeError::None) {
- index = mSettingValues.indexOf(QVariant(value));
- CX_DEBUG(("CxuiSettingRadioButtonList - got original index of: %d", index));
- }
-
- mOriginalIndex = index;
- setSelected(mOriginalIndex);
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
/*!
This slot can be used to set the selection accepted.
*/
@@ -153,6 +165,11 @@
CX_DEBUG_EXIT_FUNCTION();
}
+/*!
+* Handle closing the listbox. If the current selection was accepted,
+* we commit the new value here. If current selection has been cancelled,
+* we commit the original value.
+*/
void CxuiSettingRadioButtonList::handleClose()
{
CX_DEBUG_ENTER_FUNCTION();
@@ -173,18 +190,18 @@
/*!
- Commits value to the cenrep store.
+ Commits value to settings.
*/
void CxuiSettingRadioButtonList::commit(int index)
{
CX_DEBUG_ENTER_FUNCTION();
- CX_DEBUG(("id: %s", mSettingId.toAscii().data()));
+ CX_DEBUG(("CxuiSettingRadioButtonList - id: %s", qPrintable(mSettingId)));
if (!mSettingId.isEmpty() && !mSettingValues.isEmpty()) {
QVariant value = mSettingValues.at(index);
if (value.type() == QVariant::Int) {
- CX_DEBUG(("index:%d value:%d", index, value.toInt()));
+ CX_DEBUG(("CxuiSettingRadioButtonList - index:%d value:%d", index, value.toInt()));
// Don't set the value again, if it is the current value.
// For e.g. video quality it would result in re-preparation etc.
@@ -198,11 +215,11 @@
emit valueSelected(value.toInt());
} else if (value.type() == QVariant::String) {
- CX_DEBUG(("index:%d value:[%s]", index, value.toString().toAscii().constData()));
+ CX_DEBUG(("CxuiSettingRadioButtonList - index:%d value:[%s]", index, qPrintable(value.toString())));
QString current;
CxeError::Id status(mEngine->settings().get(mSettingId, current));
- CX_DEBUG(("settings model value:[%s]", current.toAscii().constData()));
+ CX_DEBUG(("CxuiSettingRadioButtonList - settings model value:[%s]", qPrintable(current)));
if (status != CxeError::None || current != value.toString()) {
mEngine->settings().set(mSettingId, value.toString());
--- a/camerauis/cameraxui/cxui/src/cxuisettingradiobuttonlistmodel.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuisettingradiobuttonlistmodel.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -19,6 +19,7 @@
#include "cxutils.h" // debug
#include "cxuienums.h"
+#include "cxuisettingsinfo.h"
#include "cxuisettingradiobuttonlist.h"
#include "cxuisettingradiobuttonlistmodel.h"
@@ -79,10 +80,12 @@
CX_DEBUG(("CxuiSettingRadioButtonListModel: Listbox type is TwoLineListBox"));
// two line list box
// get the two strings
- QStringList lines = setting.split(",");
- QString first = lines[0];
- QString second = lines[1];
- list << first << second ;
+ QStringList lines = setting.split(CxUiSettings::NEW_LINE_CHAR);
+ // Split returns always atleast a single element list.
+ list << lines[0];
+ if (lines.size() > 1) {
+ list << lines[1];
+ }
} else {
CX_DEBUG(("CxuiSettingRadioButtonListModel: Listbox type is SingleLine"));
list << setting;
@@ -90,7 +93,7 @@
data = QVariant(list);
} else {
- CX_DEBUG(("[WARNING] CxuiSettingRadioButtonListModel: role is not DisplayRole!"));
+ // No action
}
CX_DEBUG_EXIT_FUNCTION();
--- a/camerauis/cameraxui/cxui/src/cxuisettingsinfo.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuisettingsinfo.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -18,6 +18,7 @@
#include <QSize>
#include <QMetaType>
#include <QVariant>
+#include <hbparameterlengthlimiter.h>
#include "cxutils.h"
#include "cxuienums.h"
@@ -83,21 +84,12 @@
* CxuiSettingsInfo::CxuiSettingsInfo
*/
CxuiSettingsInfo::CxuiSettingsInfo(CxeEngine *engine)
-: mEngine(engine)
+ : mMode(-1), 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();
}
@@ -125,6 +117,9 @@
{
CX_DEBUG_ENTER_FUNCTION();
+ // Check that right content is loaded. Load now if not.
+ checkMode();
+
bool found(false);
if (key == CxeSettingIds::IMAGE_QUALITY ||
@@ -154,6 +149,9 @@
{
CX_DEBUG_ENTER_FUNCTION();
+ // Check that right content is loaded. Load now if not.
+ checkMode();
+
bool found(false);
if (mXmlReader) {
@@ -209,30 +207,31 @@
int index = 0;
// get the localized possible strings for each image quality setting
- QString vga = hbTrId("txt_cam_dblist_vga");
- QString normal = hbTrId("txt_cam_dblist_ln_mpix");
- QString imagesLeft = hbTrId("txt_cam_dblist_hd_720p_val_ln_images_left");
- QString widescreen = hbTrId("txt_cam_dblist_ln_mpix_widescreen");
+ QString vga = "txt_cam_dblist_vga";
+ QString normal = "txt_cam_dblist_ln_mpix";
+ QString imagesLeft = "txt_cam_dblist_hd_720p_val_ln_images_left";
+ QString widescreen = "txt_cam_dblist_ln_mpix_widescreen";
foreach(CxeImageDetails quality, list) {
// mapping the right value for each quality
QString settingString;
QString qualityIcon = "";
+ qreal pxCount = quality.mMpxCount.toDouble();
if (quality.mWidth == KResVGA.width() && quality.mHeight == KResVGA.height()) {
- settingString.append(vga);
+ settingString.append(hbTrId(vga.toAscii().constData()));
settingString.append(" ");
}
if (quality.mAspectRatio == Cxe::AspectRatio16to9) {
- settingString.append(widescreen.arg(quality.mMpxCount));
+ settingString.append(hbTrId(widescreen.toAscii().constData()).arg(pxCount,0,'g',3));
} else {
- settingString.append(normal.arg(quality.mMpxCount));
+ settingString.append(hbTrId(normal.toAscii().constData()).arg(pxCount,0,'g',3));
}
- settingString.append(",");
- settingString.append(imagesLeft.arg(quality.mPossibleImages));
+ settingString.append(NEW_LINE_CHAR);
+ settingString.append(HbParameterLengthLimiter(imagesLeft.toAscii().constData(), quality.mPossibleImages));
CX_DEBUG(( "Image quality setting string: %s", settingString.toAscii().constData()));
if (quality.mMpxCount == "12") {
@@ -307,7 +306,7 @@
qualityIcon = "qtg_mono_vga_wide";
}
- settingString.append(",");
+ settingString.append(NEW_LINE_CHAR);
time.sprintf("%02d:%02d", quality.mRemainingTime / 60, quality.mRemainingTime % 60);
settingString.append(timeleft.arg(time));
@@ -326,23 +325,33 @@
CX_DEBUG_EXIT_FUNCTION();
}
-/**
-* Load new setting content based on the new mode.
+/*!
+* Check that the right content for current mode is loaded.
+*
+* UI gets "settings changed" / "scene changed" events quite
+* early when switching mode (image / video). We cannot rely
+* on CxeCameraDeviceControl::initModeComplete signal since
+* that would be coming too late. (We would be using setting XML
+* for the old mode, and setting keys/values/icons would not
+* be found.) Better check this whenever UI requests for
+* content for a setting, and reload the XML when needed.
+* @see CxuiSettingsInfo::getSettingsContent(const QString &, RadioButtonListParams &)
+* @see CxuiSettingsInfo::getSettingsContent(const QString &, SliderParams &)
+* @see CxeCameraDeviceControl::initModeComplete(CxeError::Id)
*/
-void CxuiSettingsInfo::initForCurrentMode(CxeError::Id status)
+void CxuiSettingsInfo::checkMode()
{
CX_DEBUG_ENTER_FUNCTION();
- if (status == CxeError::None) {
+ int oldMode = mMode;
+ mMode = mEngine->cameraDeviceControl().mode();
+ if (mMode != oldMode) {
// 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();
--- a/camerauis/cameraxui/cxui/src/cxuisettingxmlreader.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuisettingxmlreader.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -18,6 +18,7 @@
#include <QPair>
#include <QtXml>
#include <QFile>
+#include <hbparameterlengthlimiter.h>
#include "cxutils.h"
@@ -34,7 +35,8 @@
static const char *TAG_SETTING_LIST = "setting_list";
static const char *TAG_SETTING_SLIDER = "setting_slider";
static const char *TAG_ITEM = "item";
- static const char *TAG_ITEM_VARIANT = "lnItem";
+ static const char *TAG_ITEM_VARIANT_LN = "lnItem";
+ static const char *TAG_ITEM_VARIANT_L1 = "l1Item";
static const char *TAG_SETUP = "setup";
static const char *ATTRIBUTE_ID = "id";
@@ -47,6 +49,7 @@
static const char *ATTRIBUTE_VALUE = "value";
static const char *ATTRIBUTE_LOCALIZATION_ID = "string";
static const char *ATTRIBUTE_LOCALIZATION_ID_LN_VALUE = "lnValue";
+ static const char *ATTRIBUTE_LOCALIZATION_ID_L1_VALUE = "l1Value";
static const char *ATTRIBUTE_SLIDER_MIN = "min";
static const char *ATTRIBUTE_SLIDER_MAX = "max";
@@ -310,18 +313,26 @@
value.setValue(string);
}
-
// get the string text id from the xml, and format based on type.
string = e.attribute(ATTRIBUTE_LOCALIZATION_ID);
if (e.tagName() == TAG_ITEM) {
- // get the localizable string from the hbtrid
+ // string without parameters: get localised string
string = hbTrId(string.toAscii().constData());
- } else if (e.tagName() == TAG_ITEM_VARIANT) {
+ CX_DEBUG(("tag name <%s>", e.tagName().toAscii().constData()));
+ } else if (e.tagName() == TAG_ITEM_VARIANT_L1) {
+ // string with numeric parameter: get localised string and add numeric parameter
+ QString l1Value = e.attribute(ATTRIBUTE_LOCALIZATION_ID_L1_VALUE);
+ string = hbTrId(string.toAscii().constData()).arg(l1Value.toInt());
+ CX_DEBUG(("tag name <%s>", e.tagName().toAscii().constData()));
+ CX_DEBUG(("attribute [%s] value[%s]", ATTRIBUTE_LOCALIZATION_ID_L1_VALUE,
+ string.toAscii().constData()));
+ } else if (e.tagName() == TAG_ITEM_VARIANT_LN) {
QString lnValue = e.attribute(ATTRIBUTE_LOCALIZATION_ID_LN_VALUE);
- // format the setting string
- string = hbTrId(string.toAscii().constData(), lnValue.toInt());
+ // string with count parameter: get localised string and add plural form numeric parameter
+ string = HbParameterLengthLimiter(string.toAscii().constData(), lnValue.toInt());
+ CX_DEBUG(("tag name <%s>", e.tagName().toAscii().constData()));
+ CX_DEBUG(("attribute [%s] value[%s]", ATTRIBUTE_LOCALIZATION_ID_LN_VALUE, string.toAscii().constData()));
}
- CX_DEBUG(("attribute [%s] value[%s]", ATTRIBUTE_LOCALIZATION_ID, string.toAscii().constData()));
if (!string.isNull()) {
CxUiSettings::SettingItem setting;
@@ -382,14 +393,14 @@
stepString = e.attribute(ATTRIBUTE_SLIDER_MAJOR_STEP);
p->mMajorStep = stepString.toReal();
- // get the ln value from xml to generate strings for slider
- QString lnValue = e.attribute(ATTRIBUTE_LOCALIZATION_ID_LN_VALUE);
+ // get the l1 value from xml to generate strings for slider
+ QString l1Value = e.attribute(ATTRIBUTE_LOCALIZATION_ID_L1_VALUE);
// Don't create labels for slider if no strings are defined in settinsg xml
// Create labels only for major ticks
if (!minString.isEmpty() && !maxString.isEmpty()) {
qreal step = p->mMajorStep;
- qreal value = lnValue.toDouble();
+ qreal value = l1Value.toDouble();
// generating all negative valued strings for slider setting
while (value > 0) {
// format the setting string
@@ -401,7 +412,7 @@
// generating all non-negative valued strings for slider setting
step = p->mMajorStep;
value = 0;
- while(value <= lnValue.toInt()) {
+ while(value <= l1Value.toInt()) {
// format the setting string
QString str = hbTrId(maxString.toAscii().constData()).arg(value,0,'f',1);
p->mSettingStrings.append(str);
@@ -409,8 +420,8 @@
}
}
- int min = -lnValue.toInt();
- int max = lnValue.toInt();
+ int min = -l1Value.toInt();
+ int max = l1Value.toInt();
p->mRange = qMakePair(min, max);
}
--- a/camerauis/cameraxui/cxui/src/cxuistandby.cpp Thu May 13 21:30:19 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,240 +0,0 @@
-/*
-* 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 <QTimer>
-#include <QApplication>
-#include <QGraphicsSceneEvent>
-#include <hblabel.h>
-#include <hbdialog.h>
-#include <QGraphicsRectItem>
-#include <QColor>
-
-#include "cxutils.h"
-#include "cxeengine.h"
-#include "cxuienums.h"
-#include "cxuistandby.h"
-#include "cxuidocumentloader.h"
-#include "cxeviewfindercontrol.h"
-#include "cxuicapturekeyhandler.h"
-#include "cxestillcapturecontrol.h"
-#include "cxevideocapturecontrol.h"
-
-
-
-/*
-* CxuiStandby::CxuiStandby
-*/
-CxuiStandby::CxuiStandby(CxuiCaptureKeyHandler &keyHandler,CxuiDocumentLoader *documentLoader, CxeEngine *engine)
-: mKeyHandler(keyHandler),
- mDocumentLoader(documentLoader),
- mEngine(engine),
- mStandbyPopup(NULL),
- mStandbyDialogVisible(false)
-{
- CX_DEBUG_ENTER_FUNCTION();
- CX_ASSERT_ALWAYS(engine);
-
- // initialize standby timer
- mStandbyTimer = new QTimer(this);
-
- // install event filter for application wide events
- QCoreApplication::instance()->installEventFilter(this);
-
- CX_ASSERT_ALWAYS(mStandbyTimer);
- connect(mStandbyTimer, SIGNAL(timeout()), this, SLOT(toStandby()));
- mStandbyTimer->setSingleShot(true);
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-
-/*
-* CxuiStandby::~CxuiStandby()
-*/
-CxuiStandby::~CxuiStandby()
-{
- CX_DEBUG_IN_FUNCTION();
- // remove the event filter
- QCoreApplication::instance()->removeEventFilter(this);
- // stop standby timer
- stopTimer();
-}
-
-
-/*
-* stops standby timer
-*/
-void CxuiStandby::stopTimer()
-{
- if(mStandbyTimer) {
- mStandbyTimer->stop();
- }
-}
-
-/*
-* starts standby timer
-*/
-void CxuiStandby::startTimer()
-{
- if(mStandbyTimer) {
- mStandbyTimer->start(CXUI_STANDBY_CAMERA_TIMEOUT);
- }
-}
-
-
-/*
-* handles mouse press events
-* returns if mouse key press is consumed.
-*/
-bool CxuiStandby::handleMouseEvent()
-{
- bool keyHandled = false;
-
- // close the dialog if it's visible
- if (mStandbyDialogVisible && mStandbyPopup) {
- CX_DEBUG(( "closing the popup mStandbyDialogVisible = : %d", mStandbyDialogVisible ));
- mStandbyPopup->close();
- keyHandled = true;
- } else if (mStandbyTimer && mStandbyTimer->isActive()) {
- // restart the timer only if it's running
- startTimer();
- }
-
- return keyHandled;
-}
-
-
-/*
-* switching to standby.
-*/
-void CxuiStandby::toStandby()
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- if (proceedToStandy()) {
-
- // signal for ui classes to prepare for standby
- emit aboutToEnterStandby();
-
- mStandbyDialogVisible = true;
-
- if (mStandbyPopup == NULL) {
- CX_DEBUG(("Loading standby DocML"));
- bool ok = false;
- // Use document loader to create popup
- mDocumentLoader->load(CxUiLayout::STANDBY_POPUP_XML, &ok);
- CX_DEBUG(("standby load ok=%d", ok));
- mStandbyPopup = qobject_cast<HbDialog*>(mDocumentLoader->findWidget(CxUiLayout::STANDBY_POPUP));
- CX_ASSERT_ALWAYS(mStandbyPopup);
- mStandbyPopup->setTimeout(HbDialog::NoTimeout);
- mStandbyPopup->setBackgroundFaded(false);
- mStandbyPopup->setPreferredPos(QPointF(0,0));
- // color of standby text is set in the code. It cannot be done in docml
- HbLabel* label = qobject_cast<HbLabel*>(mDocumentLoader->findWidget(CxUiLayout::STANDBY_TEXT_WIDGET));
- label->setTextColor(Qt::white);
-
- // connecting "abouttoclose" signal to dismissStandby
- connect(mStandbyPopup, SIGNAL(aboutToClose()), this, SLOT(dismissStandby()));
-
- // HbDialog's default background item is replaced with black rectangle
- QGraphicsRectItem *backgroundItem = new QGraphicsRectItem();
- QBrush blackBrush = QBrush(Qt::black);
- backgroundItem->setBrush(blackBrush);
- QGraphicsItem *origBgItem = mStandbyPopup->backgroundItem();
- backgroundItem->setRect(origBgItem->boundingRect());
- mStandbyPopup->setBackgroundItem(backgroundItem);
-
- }
-
- CX_ASSERT_ALWAYS(mStandbyPopup);
-
- mStandbyPopup->show();
- // connecting half press or full press key signal to dismiss standby
- connect(&mKeyHandler, SIGNAL(autofocusKeyPressed()), mStandbyPopup, SLOT(close()));
- connect(&mKeyHandler, SIGNAL(captureKeyPressed()), mStandbyPopup, SLOT(close()));
- }
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/*
-* dismisses standby
-*/
-void CxuiStandby::dismissStandby()
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- if(mStandbyDialogVisible) {
- // stop the standby timer and close the pop-up
- mStandbyDialogVisible = false;
- //restart timer
- startTimer();
- // signal for ui classes to prepare for standby exit
- emit aboutToExitStandby();
- }
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-
-/*
-* checks if we can swtich to standby
-*/
-bool CxuiStandby::proceedToStandy()
-{
- CX_DEBUG_ENTER_FUNCTION();
- CX_ASSERT_ALWAYS(mEngine);
-
- bool ok = false;
- if(!mStandbyDialogVisible &&
- mEngine->isEngineReady()) {
- CX_DEBUG(("show standby dialog"));
- ok = true;
- }
-
- CX_DEBUG(( "CxuiStandby::proceedToStandy proceedToStandy: %d", ok ));
-
- return ok;
-}
-
-
-
-/*
-* Event filter which filters application wide mouse events.
-*/
-
-bool CxuiStandby::eventFilter(QObject *object, QEvent *event)
-{
- Q_UNUSED(object);
-
- bool eventWasConsumed = false;
- switch (event->type()) {
- case QEvent::GraphicsSceneMouseMove:
- case QEvent::GraphicsSceneMousePress:
- case QEvent::GraphicsSceneMouseRelease:
- eventWasConsumed = handleMouseEvent();
- break;
- default:
- break;
- }
- return eventWasConsumed;
-}
-
-// end of file
--- a/camerauis/cameraxui/cxui/src/cxuistillprecaptureview.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuistillprecaptureview.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -14,14 +14,16 @@
* Description:
*
*/
+#include <QVariant>
+#include <QMetaType>
+#include <QGraphicsLayout>
+
#include <hbpushbutton.h>
#include <hblabel.h>
#include <hbtoolbar.h>
#include <hbaction.h>
#include <hbmainwindow.h>
#include <hbtransparentwindow.h>
-#include <QVariant>
-#include <QMetaType>
#include <hbslider.h>
#include <hblistwidget.h>
#include <hbdialog.h>
@@ -31,6 +33,7 @@
#include <hbdeviceprofile.h> // HbDeviceProfile
#include <hbmenu.h>
#include <hbicon.h>
+#include <hbactivitymanager.h>
#include "cxuiselftimer.h"
#include "cxeengine.h"
@@ -82,19 +85,28 @@
delete mSelfTimer;
}
+/*!
+ * Construct-method handles initialisation tasks for this class. Needs to be called
+ * before the instance of this class is used.
+ * @param mainwindow
+ * @param engine
+ * @param documentLoader
+ * @param keyHandler
+ */
void CxuiStillPrecaptureView::construct(HbMainWindow *mainwindow, CxeEngine *engine,
CxuiDocumentLoader *documentLoader,
- CxuiCaptureKeyHandler *keyHandler)
+ CxuiCaptureKeyHandler *keyHandler,
+ HbActivityManager *activityManager)
{
CX_DEBUG_ENTER_FUNCTION();
OstTrace0( camerax_performance, CXUISTILLPRECAPTUREVIEW_CONSTRUCT, "msg: e_CX_STILLPRECAPVIEW_CONSTRUCT 1" );
// constuct base class
- CxuiPrecaptureView::construct(mainwindow, engine, documentLoader, keyHandler);
+ CxuiPrecaptureView::construct(mainwindow, engine, documentLoader, keyHandler, activityManager);
connect(&mEngine->autoFocusControl(), SIGNAL(stateChanged(CxeAutoFocusControl::State,CxeError::Id)),
this, SLOT(handleAutoFocusStateChanged(CxeAutoFocusControl::State,CxeError::Id)));
- connect(&mEngine->stillCaptureControl(), SIGNAL(snapshotReady(CxeError::Id, const QPixmap&, int)),
+ connect(&mEngine->stillCaptureControl(), SIGNAL(snapshotReady(CxeError::Id, const QImage&, int)),
this, SLOT(handleSnapshot(CxeError::Id)));
connect(&mEngine->stillCaptureControl(), SIGNAL(stateChanged(CxeStillCaptureControl::State, CxeError::Id)),
this, SLOT(handleStillCaptureStateChanged(CxeStillCaptureControl::State, CxeError::Id)));
@@ -111,39 +123,124 @@
mSelfTimer = new CxuiSelfTimer(mEngine->settings());
connect(mSelfTimer, SIGNAL(timerFinished()), this, SLOT(focusAndCapture()));
+ int value = Cxe::GeoTaggingDisclaimerDisabled;
+ mEngine->settings().get(CxeSettingIds::GEOTAGGING_DISCLAIMER, value);
+ if (value == Cxe::GeoTaggingDisclaimerEnabled) {
+ launchGeoTaggingDisclaimerDialog();
+ }
+
OstTrace0( camerax_performance, DUP1_CXUISTILLPRECAPTUREVIEW_CONSTRUCT, "msg: e_CX_STILLPRECAPVIEW_CONSTRUCT 0" );
CX_DEBUG_EXIT_FUNCTION();
}
+/*!
+ * Loads default widgets in layouts xml.
+ */
void CxuiStillPrecaptureView::loadDefaultWidgets()
{
CX_DEBUG_ENTER_FUNCTION();
- CX_DEBUG_ASSERT(mDocumentLoader);
+ CX_ASSERT_ALWAYS(mDocumentLoader);
// get pointer to the viewfinder
QGraphicsWidget *widget = NULL;
widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_VIEWFINDER);
mViewfinder = qobject_cast<HbTransparentWindow *>(widget);
- CX_DEBUG_ASSERT(mViewfinder);
+ CX_ASSERT_ALWAYS(mViewfinder);
+
+ reloadIndicatorWidgets();
+ CX_DEBUG_EXIT_FUNCTION();
+}
+/*!
+ * Loads default indicators from docml and modifies the visibility
+ * according to current settings.
+ */
+void CxuiStillPrecaptureView::reloadIndicatorWidgets()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ CX_ASSERT_ALWAYS(mDocumentLoader);
+
+ bool ok = false;
+ mDocumentLoader->load(STILL_1ST_XML, STILL_PRE_CAPTURE_INDICATORS_SECTION, &ok);
+ CX_ASSERT_ALWAYS(ok);
+
+ QGraphicsWidget *widget = NULL;
widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_QUALITY_ICON);
mQualityIcon = qobject_cast<HbLabel *>(widget);
- CX_DEBUG_ASSERT(mQualityIcon);
+ CX_ASSERT_ALWAYS(mQualityIcon);
+
+ widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_FLASHBLINK_INDICATOR_ICON);
+ HbLabel *flashBlinkingIcon = qobject_cast<HbLabel *>(widget);
+ CX_ASSERT_ALWAYS(flashBlinkingIcon);
+
+ widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_GEOTAGGING_INDICATOR_ICON);
+ mGeoTaggingIndicatorIcon = qobject_cast<HbLabel *>(widget);
+ CX_ASSERT_ALWAYS(mGeoTaggingIndicatorIcon);
+
+ widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_FACE_TRACKING_ICON);
+ mFaceTrackingIcon = qobject_cast<HbLabel *>(widget);
+ CX_ASSERT_ALWAYS(mFaceTrackingIcon);
widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_INDICATOR_CONTAINER);
mIndicators = qobject_cast<HbWidget *>(widget);
- CX_DEBUG_ASSERT(mIndicators);
+ CX_ASSERT_ALWAYS(mIndicators);
+
+ QGraphicsLayout *layout = mIndicators->layout();
+ QGraphicsLayoutItem *graphicsLayoutItem = NULL;
+ QGraphicsItem *graphicsItem = NULL;
+ QString key = "";
+ int currentSettingValue = -1;
+ bool isSettingOff = false;
+ // Go through the items in the layout to check whether they should be
+ // shown or not in the indicator pane. Start from the last towards
+ // the first, so that removing items from between works correctly.
+ for (int i = layout->count() - 1; i >= 0; i--) {
+ graphicsLayoutItem = layout->itemAt(i);
+ isSettingOff = false;
+ if (graphicsLayoutItem) {
+ graphicsItem = graphicsLayoutItem->graphicsItem();
+ currentSettingValue = -1;
+ if (graphicsItem == mGeoTaggingIndicatorIcon) {
+ key = CxeSettingIds::GEOTAGGING;
+ mEngine->settings().get(key, currentSettingValue);
+ if (currentSettingValue == Cxe::GeoTaggingOff) {
+ isSettingOff = true;
+ }
+ } else if (graphicsItem == mFaceTrackingIcon) {
+ key = CxeSettingIds::FACE_TRACKING;
+ mEngine->settings().get(key, currentSettingValue);
+ // facetracking implementation does not use
+ // enum for on/off values but instead
+ // 0 for off and 1 for on.
+ if (currentSettingValue == 0) {
+ isSettingOff = true;
+ }
+ } else if (graphicsItem == flashBlinkingIcon) {
+ //remove flash indicator
+ isSettingOff = true;
+ }
+ if (isSettingOff) {
+ layout->removeAt(i);
+ }
+ }
+ }
+
// create background for indicator container
createWidgetBackgroundGraphic(mIndicators, TRANSPARENT_BACKGROUND_GRAPHIC);
+
+ mIndicators->setVisible(true);
CX_DEBUG_EXIT_FUNCTION();
}
-
+/*!
+ * Loads widgets that are not part of the default section in layouts xml.
+ * Widgets are created at the time they are first loaded.
+ */
void CxuiStillPrecaptureView::loadWidgets()
{
CX_DEBUG_ENTER_FUNCTION();
- CX_DEBUG_ASSERT(mDocumentLoader);
+ CX_ASSERT_ALWAYS(mDocumentLoader);
if( mWidgetsLoaded ) {
CX_DEBUG(("Widgets already loaded"));
@@ -157,14 +254,14 @@
OstTrace0( camerax_performance, DUP4_CXUISTILLPRECAPTUREVIEW_LOADWIDGETS, "msg: e_CX_DOCUMENTLOADER_LOAD 1" );
mDocumentLoader->load(STILL_1ST_XML, STILL_PRE_CAPTURE_WIDGETS_SECTION, &ok);
- Q_ASSERT_X(ok, "camerax ui", "error in xml file parsing");
+ CX_ASSERT_ALWAYS(ok);
if (CxuiServiceProvider::isCameraEmbedded()) {
mDocumentLoader->load(STILL_1ST_XML, STILL_PRE_CAPTURE_EMBEDDED_SECTION, &ok);
} else {
mDocumentLoader->load(STILL_1ST_XML, STILL_PRE_CAPTURE_STANDALONE_SECTION, &ok);
}
OstTrace0( camerax_performance, DUP5_CXUISTILLPRECAPTUREVIEW_LOADWIDGETS, "msg: e_CX_DOCUMENTLOADER_LOAD 0" );
- Q_ASSERT_X(ok, "camerax ui", "error in xml file parsing");
+ CX_ASSERT_ALWAYS(ok);
// get pointers to ui components from the layout data
QGraphicsWidget *widget = NULL;
@@ -172,8 +269,8 @@
widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_ZOOM_SLIDER);
mSlider = qobject_cast<CxuiZoomSlider *>(widget);
- CX_DEBUG_ASSERT(mSlider);
- addIncreaseDecreaseButtons(mSlider);
+ CX_ASSERT_ALWAYS(mSlider);
+ mSlider->addZoomButtons();
createWidgetBackgroundGraphic(mSlider, TRANSPARENT_BACKGROUND_GRAPHIC);
if (mSelfTimer) {
@@ -186,30 +283,30 @@
HbWidget *container = NULL;
widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_SELFTIMER_CONTAINER);
container = qobject_cast<HbWidget *>(widget);
- CX_DEBUG_ASSERT(container);
+ CX_ASSERT_ALWAYS(container);
createWidgetBackgroundGraphic(container, TRANSPARENT_BACKGROUND_GRAPHIC);
// connect selftimer start button to hide controls
widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_SELFTIMER_START_BUTTON);
HbPushButton *startButton = qobject_cast<HbPushButton *>(widget);
- CX_DEBUG_ASSERT(startButton);
+ CX_ASSERT_ALWAYS(startButton);
connect(startButton, SIGNAL(released()), this, SLOT(hideControls()));
widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_TOOLBAR);
- mToolBar = qobject_cast<HbToolBar *>(widget);
- CX_DEBUG_ASSERT(mToolBar);
+ mToolbar = qobject_cast<HbToolBar *>(widget);
+ CX_ASSERT_ALWAYS(mToolbar);
object = mDocumentLoader->findObject(STILL_PRE_CAPTURE_FLASH_ACTION);
mFlashSetting = qobject_cast<HbAction *>(object);
- CX_DEBUG_ASSERT(mFlashSetting);
+ CX_ASSERT_ALWAYS(mFlashSetting);
widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_IMAGES_LEFT_LABEL);
mImagesLeft = qobject_cast<HbLabel *>(widget);
- CX_DEBUG_ASSERT(mImagesLeft);
+ CX_ASSERT_ALWAYS(mImagesLeft);
widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_IMAGES_LEFT_CONTAINER);
mImagesLeftContainer = qobject_cast<HbWidget *>(widget);
- CX_DEBUG_ASSERT(mImagesLeftContainer);
+ CX_ASSERT_ALWAYS(mImagesLeftContainer);
createWidgetBackgroundGraphic(mImagesLeftContainer, TRANSPARENT_BACKGROUND_GRAPHIC);
updateImagesLeftLabel();
@@ -240,27 +337,68 @@
}
- // update toolbar flash icon
+ // Setting widgets loaded here so updating icons works.
+ mWidgetsLoaded = true;
+
+ // Update toolbar flash mode icon
int flash;
if (mEngine->settings().get(CxeSettingIds::FLASH_MODE, flash) == CxeError::None) {
handleSettingValueChanged(CxeSettingIds::FLASH_MODE, flash);
}
- // update toolbar scene mode
- QString scene;
- if (mEngine->settings().get(CxeSettingIds::IMAGE_SCENE, scene) == CxeError::None) {
- handleSettingValueChanged(CxeSettingIds::IMAGE_SCENE, scene);
+ // Update toolbar scene mode icon
+ QString sceneId;
+ if (mEngine->settings().get(CxeSettingIds::SCENE_ID, sceneId) == CxeError::None) {
+ updateSceneIcon(sceneId);
}
hideControls();
- mWidgetsLoaded = true;
+ // View is ready. Needed for startup performance automated testing.
+ emit viewReady();
OstTrace0( camerax_performance, DUP1_CXUISTILLPRECAPTUREVIEW_LOADWIDGETS, "msg: e_CX_STILLPRECAPTUREVIEW_LOADWIDGETS 0" );
CX_DEBUG_EXIT_FUNCTION();
}
/*!
+ * Restore view state from activity.
+ */
+void CxuiStillPrecaptureView::restoreActivity(const QString &activityId, const QVariant &data)
+{
+ Q_UNUSED(activityId);
+ Q_UNUSED(data);
+
+ CX_DEBUG_ENTER_FUNCTION();
+ // no need to restore any state
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * Save view state to activity.
+ */
+void CxuiStillPrecaptureView::saveActivity()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ QVariantMap data;
+ QVariantHash params;
+ //@todo: add pre-capture icon as screenshot
+ mActivityManager->removeActivity(CxuiActivityIds::STILL_PRECAPTURE_ACTIVITY);
+ mActivityManager->addActivity(CxuiActivityIds::STILL_PRECAPTURE_ACTIVITY, data, params);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * Clear activity from activity manager.
+ */
+void CxuiStillPrecaptureView::clearActivity()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mActivityManager->removeActivity(CxuiActivityIds::STILL_PRECAPTURE_ACTIVITY);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
* Initializing settings grid
*/
void CxuiStillPrecaptureView::initializeSettingsGrid()
@@ -271,45 +409,114 @@
// Initialize settings grid
mSettingsGrid = new HbToolBarExtension;
- action = mSettingsGrid->addAction(HbIcon("qtg_mono_exposure.svg"), hbTrId("txt_cam_button_exposure_compensation"), this, SLOT(launchSliderSetting()));
+ action = mSettingsGrid->addAction(HbIcon("qtg_mono_exposure"), hbTrId("txt_cam_button_exposure_compensation"), this, SLOT(launchSliderSetting()));
action->setProperty(PROPERTY_KEY_SETTING_ID, CxeSettingIds::EV_COMPENSATION_VALUE);
action->setProperty(PROPERTY_KEY_SETTING_GRID, PROPERTY_KEY_TRUE);
- action = mSettingsGrid->addAction(HbIcon("qtg_mono_iso.svg"), hbTrId("txt_cam_button_iso"), this, SLOT(launchSetting()));
+ action = mSettingsGrid->addAction(HbIcon("qtg_mono_iso"), hbTrId("txt_cam_button_iso"), this, SLOT(launchSetting()));
action->setProperty(PROPERTY_KEY_SETTING_ID, CxeSettingIds::LIGHT_SENSITIVITY);
action->setProperty(PROPERTY_KEY_SETTING_GRID, PROPERTY_KEY_TRUE);
- action = mSettingsGrid->addAction(HbIcon("qtg_small_rgb.svg"), hbTrId("txt_cam_button_color_tone"), this, SLOT(launchSetting()));
+ action = mSettingsGrid->addAction(HbIcon("qtg_small_rgb"), hbTrId("txt_cam_button_color_tone"), this, SLOT(launchSetting()));
action->setProperty(PROPERTY_KEY_SETTING_ID, CxeSettingIds::COLOR_TONE);
action->setProperty(PROPERTY_KEY_SETTING_GRID, PROPERTY_KEY_TRUE);
- action = mSettingsGrid->addAction(HbIcon("qtg_mono_white_balance.svg"), hbTrId("txt_cam_button_white_balance"), this, SLOT(launchSetting()));
+ action = mSettingsGrid->addAction(HbIcon("qtg_mono_white_balance"), hbTrId("txt_cam_button_white_balance"), this, SLOT(launchSetting()));
action->setProperty(PROPERTY_KEY_SETTING_ID, CxeSettingIds::WHITE_BALANCE);
action->setProperty(PROPERTY_KEY_SETTING_GRID, PROPERTY_KEY_TRUE);
- action = mSettingsGrid->addAction(HbIcon("qtg_mono_sharpness.svg"), hbTrId("txt_cam_grid_sharpness"), this, SLOT(launchSliderSetting()));
+ action = mSettingsGrid->addAction(HbIcon("qtg_mono_sharpness"), hbTrId("txt_cam_grid_sharpness"), this, SLOT(launchSliderSetting()));
action->setProperty(PROPERTY_KEY_SETTING_ID, CxeSettingIds::SHARPNESS);
action->setProperty(PROPERTY_KEY_SETTING_GRID, PROPERTY_KEY_TRUE);
- action = mSettingsGrid->addAction(HbIcon("qtg_mono_contrast.svg"), hbTrId("txt_cam_button_contrast"), this, SLOT(launchSliderSetting()));
+ action = mSettingsGrid->addAction(HbIcon("qtg_mono_contrast"), hbTrId("txt_cam_button_contrast"), this, SLOT(launchSliderSetting()));
action->setProperty(PROPERTY_KEY_SETTING_ID, CxeSettingIds::CONTRAST);
action->setProperty(PROPERTY_KEY_SETTING_GRID, PROPERTY_KEY_TRUE);
- mSettingsGrid->addAction(HbIcon("qtg_mono_face_tracking.svg"), hbTrId("txt_cam_button_face_tracking"), this, SLOT(launchNotSupportedNotification()));
+ action = mSettingsGrid->addAction(HbIcon("qtg_mono_face_tracking"), hbTrId("txt_cam_button_face_tracking"), this, SLOT(launchSetting()));
+ action->setProperty(PROPERTY_KEY_SETTING_ID, CxeSettingIds::FACE_TRACKING);
action->setProperty(PROPERTY_KEY_SETTING_GRID, PROPERTY_KEY_TRUE);
- connect(mKeyHandler, SIGNAL(autofocusKeyPressed()), mSettingsGrid, SLOT(close()));
+ connect(mCaptureKeyHandler, SIGNAL(autofocusKeyPressed()), mSettingsGrid, SLOT(close()));
}
}
-void CxuiStillPrecaptureView::launchSceneModesPopup()
+/**
+* Get if postcapture view should be shown or not.
+* Postcapture view may be shown for a predefined time or
+* until user dismisses it, or it may be completely disabled.
+*/
+bool CxuiStillPrecaptureView::isPostcaptureOn() const
{
CX_DEBUG_ENTER_FUNCTION();
- hideControls();
- emit showScenesView();
+ if (CxuiServiceProvider::isCameraEmbedded()) {
+ // always show post capture in embedded mode
+ CX_DEBUG_EXIT_FUNCTION();
+ return true;
+ }
+
+ // Read the value from settings. Ignoring reading error.
+ // On error (missing settings) default to "postcapture on".
+ int showPostcapture(-1);
+ if(mEngine) {
+ mEngine->settings().get(CxeSettingIds::STILL_SHOWCAPTURED, showPostcapture);
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+ return showPostcapture != 0; // 0 == no postcapture
+}
+
+/*!
+* Update the scene mode icon.
+* @param sceneId The new scene id.
+*/
+void CxuiStillPrecaptureView::updateSceneIcon(const QString& sceneId)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (mEngine->mode() == Cxe::ImageMode) {
+ CX_DEBUG(("CxuiStillPrecaptureView - scene: %s", sceneId.toAscii().constData()));
+
+ // No need to update icon, if widgets are not even loaded yet.
+ // We'll update the icon once the widgets are loaded.
+ if (mWidgetsLoaded) {
+
+ QString iconObjectName = STILL_PRE_CAPTURE_SCENE_MODE_ACTION;
+ QString icon = getSettingItemIcon(CxeSettingIds::IMAGE_SCENE, sceneId);
+
+ CX_DEBUG(("CxuiStillPrecaptureView - icon: %s", icon.toAscii().constData()));
+
+ if (mDocumentLoader) {
+ QObject *obj = mDocumentLoader->findObject(iconObjectName);
+ CX_ASSERT_ALWAYS(obj);
+ qobject_cast<HbAction *>(obj)->setIcon(HbIcon(icon));
+ }
+ } else {
+ CX_DEBUG(("CxuiStillPrecaptureView - widgets not loaded yet, ignored!"));
+ }
+ }
CX_DEBUG_EXIT_FUNCTION();
}
+/*!
+ Update the quality indicator
+*/
+void CxuiStillPrecaptureView::updateQualityIcon()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (mQualityIcon && mEngine) {
+ QString icon = "";
+ int currentValue = -1;
+
+ mEngine->settings().get(CxeSettingIds::IMAGE_QUALITY, currentValue);
+ icon = getSettingItemIcon(CxeSettingIds::IMAGE_QUALITY, currentValue);
+
+ mQualityIcon->setIcon(HbIcon(icon));
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
void CxuiStillPrecaptureView::handleSnapshot(CxeError::Id error)
{
@@ -330,7 +537,7 @@
}
}
} else {
- emit reportError(error);
+ emit errorEncountered(error);
}
CX_DEBUG_EXIT_FUNCTION();
@@ -387,7 +594,9 @@
mEngine->stillCaptureControl().reset(); //! @todo: Do not delete snapshots before images are really saved
mEngine->stillCaptureControl().capture();
} else {
- launchDiskFullNotification();
+ // Inform that error was encountered.
+ // Error manager will show necessary message to user.
+ emit errorEncountered(CxeError::DiskFull);
}
}
} else {
@@ -455,30 +664,11 @@
default:
break;
}
- //}
CX_DEBUG_EXIT_FUNCTION();
}
-void CxuiStillPrecaptureView::updateOrientation(Qt::Orientation orientation)
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- hideControls();
- mMainWindow->setOrientation(orientation);
-
- if (orientation == Qt::Horizontal) {
- CX_DEBUG(("New screen orientation is horizontal"));
- mToolBar->setOrientation(Qt::Vertical);
- } else {
- CX_DEBUG(("New screen orientation is vertical"));
- mToolBar->setOrientation(Qt::Horizontal);
- }
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
/*!
* Handle capture key full press.
*/
@@ -580,6 +770,7 @@
updateImagesLeftLabel();
updateQualityIcon();
+ updateFaceTrackingIcon();
// cancel selftimer when returning to precapture
// since selftimer needs to be turned off after capturing an image
@@ -592,25 +783,36 @@
// in post-capture view, we need to start auto-focusing when entering
// the still precapture view.
if (event->type() == QEvent::Show &&
- mKeyHandler && mKeyHandler->isAutofocusKeyPressed()) {
+ mCaptureKeyHandler && mCaptureKeyHandler->isAutofocusKeyPressed()) {
CX_DEBUG(("Still pre-capture coming visible and auto-focus key pressed -> starting AF"));
handleAutofocusKeyPressed();
}
}
-void CxuiStillPrecaptureView::showToolbar()
+/*!
+* Allow showing UI controls?
+*/
+bool CxuiStillPrecaptureView::allowShowControls() const
{
- if (mEngine && mEngine->isEngineReady()) {
- CxuiPrecaptureView::showToolbar();
- }
+ // show controls when selftimer counter is not active
+ // and when autofocus key is not being pressed
+ bool engineOk(mEngine && mEngine->isEngineReady());
+ bool selfTimerOk(!mSelfTimer || !mSelfTimer->isOngoing());
+ bool keysOk(!mCaptureKeyHandler || !mCaptureKeyHandler->isAutofocusKeyPressed());
+
+ return engineOk && selfTimerOk && keysOk;
}
-
+/*!
+* Handle change in viewfinder state.
+*/
void CxuiStillPrecaptureView::handleViewfinderStateChanged(
- CxeViewfinderControl::State newState, CxeError::Id /*error*/)
+ CxeViewfinderControl::State newState, CxeError::Id error)
{
CX_DEBUG_ENTER_FUNCTION();
+ // Call base class to get standby timer and display always visible when needed.
+ CxuiPrecaptureView::handleVfStateChanged(newState, error);
if (newState == CxeViewfinderControl::Running) {
@@ -621,7 +823,7 @@
}
if(mMainWindow->currentView() == this &&
- mKeyHandler->isAutofocusKeyPressed()) {
+ mCaptureKeyHandler->isAutofocusKeyPressed()) {
// Viewfinder just started and the user is pressing the auto-focus key.
// Start focusing.
@@ -646,6 +848,11 @@
}
}
+/*!
+ * Signal used to reset mCapturePending after a short timeout. If the image
+ * cannot be captured within a given time of the key press, it is better to cancel
+ * the whole operation.
+ */
void CxuiStillPrecaptureView::resetCapturePendingFlag()
{
CX_DEBUG_IN_FUNCTION();
@@ -653,43 +860,6 @@
mCapturePending = false;
}
-void CxuiStillPrecaptureView::showControls()
-{
- // show controls when selftimer counter is not active
- // and when autofocus key is not being pressed
- if ( !(mSelfTimer && mSelfTimer->isOngoing()) &&
- (!mKeyHandler || !mKeyHandler->isAutofocusKeyPressed()) ) {
- CxuiPrecaptureView::showControls();
- }
-
-}
-
-/*!
-* Slot to handle application being sent to background.
-*/
-void CxuiStillPrecaptureView::handleFocusLost()
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- if (mSelfTimer && mSelfTimer->isOngoing()) {
- // If self-timer is running, stop and reset the delay now.
- mSelfTimer->reset();
- }
-
- // Release camera as we are going to background.
- // If taking image is just ongoing, it will be cancelled by engine.
- releaseCamera();
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-void CxuiStillPrecaptureView::handleFocusGained()
-{
- CX_DEBUG_ENTER_FUNCTION();
- CxuiPrecaptureView::handleFocusGained();
- CX_DEBUG_EXIT_FUNCTION();
-}
-
/*
Slot for handling scene mode change
\param scene QVariantMap containing settings related to the new scene mode
@@ -700,13 +870,7 @@
if (mEngine->mode() == Cxe::ImageMode) {
// update toolbar scene mode icon
- QString icon = getSettingItemIcon(CxeSettingIds::IMAGE_SCENE, scene[CxeSettingIds::SCENE_ID]);
- CX_DEBUG((("New scene mode icon: %s"), icon.toAscii().constData()));
- if (mDocumentLoader) {
- QObject *obj = mDocumentLoader->findObject(STILL_PRE_CAPTURE_SCENE_MODE_ACTION);
- CX_DEBUG_ASSERT(obj);
- qobject_cast<HbAction *>(obj)->setIcon(HbIcon(icon));
- }
+ updateSceneIcon(scene[CxeSettingIds::SCENE_ID].toString());
// for now, we are only interested in flashmode change
if (scene.contains(CxeSettingIds::FLASH_MODE)) {
@@ -724,6 +888,24 @@
CX_DEBUG_EXIT_FUNCTION();
}
+/*!
+* Enter standby mode.
+*/
+void CxuiStillPrecaptureView::enterStandby()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (mSelfTimer && mSelfTimer->isOngoing()) {
+ // If self-timer is running, stop and reset the delay now.
+ mSelfTimer->reset();
+ }
+
+ // Base class handles releasing camera.
+ CxuiPrecaptureView::enterStandby();
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
/*
Slot for handling setting value changes. Notice that changing the scene mode
does not emit settingValueChanged signal.
@@ -744,6 +926,11 @@
updateQualityIcon();
// update images left when quality values are changed
updateImagesLeftLabel();
+ } else if (key == CxeSettingIds::FACE_TRACKING) {
+ reloadIndicatorWidgets();
+ updateFaceTrackingIcon();
+ } else if (key == CxeSettingIds::GEOTAGGING) {
+ reloadIndicatorWidgets();
}
// update toolbar flash icon
@@ -797,6 +984,10 @@
launchSettingsDialog(action);
// special case to get value changed event to the selftimer class
if (settingsKey == CxeSettingIds::SELF_TIMER) {
+ // if selftimer is active remember the previously selected value
+ if (mSelfTimer->isEnabled()) {
+ mSettingsDialogList->setOriginalSelectedItemByValue(mSelfTimer->getTimeout());
+ }
connect(mSettingsDialogList, SIGNAL(valueSelected(int)),
mSelfTimer, SLOT(changeTimeOut(int)));
}
@@ -828,4 +1019,26 @@
CX_DEBUG_EXIT_FUNCTION();
}
+/*!
+ Update the face tracking icon
+*/
+void CxuiStillPrecaptureView::updateFaceTrackingIcon()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ if (mFaceTrackingIcon && mEngine) {
+ QString key = "";
+ QString icon = "";
+ int currentValue = -1;
+
+ key = CxeSettingIds::FACE_TRACKING;
+
+ mEngine->settings().get(key, currentValue);
+ icon = getSettingItemIcon(key, currentValue);
+
+ mFaceTrackingIcon->setIcon(HbIcon(icon));
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
// end of file
--- a/camerauis/cameraxui/cxui/src/cxuivideoprecaptureview.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuivideoprecaptureview.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -18,6 +18,7 @@
#include <e32keys.h>
#include <QApplication>
+#include <QGraphicsLayout>
#include <hbmainwindow.h>
#include <hbaction.h>
@@ -31,6 +32,7 @@
#include <hbnotificationdialog.h>
#include <hbfeedbacksettings.h>
#include <hbfeedbacknamespace.h>
+#include <hbactivitymanager.h>
#include "cxuivideoprecaptureview.h"
#include "cxeengine.h"
@@ -44,11 +46,12 @@
#include "cxuizoomslider.h"
#include "cxuicapturekeyhandler.h"
#include "cxuidocumentloader.h"
+#include "cxuiserviceprovider.h"
+
#include "OstTraceDefinitions.h"
#ifdef OST_TRACE_COMPILER_IN_USE
#include "cxuivideoprecaptureviewTraces.h"
#endif
-#include "cxuiserviceprovider.h"
using namespace Cxe;
@@ -75,9 +78,9 @@
mRemainingTimeText(NULL),
mRecordingIcon(NULL),
mGoToStillAction(NULL),
- mToolBarIdle(NULL),
- mToolBarRec(NULL),
- mToolBarPaused(NULL),
+ mToolbarIdle(NULL),
+ mToolbarRec(NULL),
+ mToolbarPaused(NULL),
mVideoScenePopup(NULL),
mVideoCaptureControl(NULL),
mMenu(NULL),
@@ -94,22 +97,32 @@
CX_DEBUG_EXIT_FUNCTION();
}
+/*!
+ * Construct-method handles initialisation tasks for this class.
+ * @param mainwindow
+ * @param engine
+ * @param documentLoader
+ * @param keyHandler
+ */
void CxuiVideoPrecaptureView::construct(HbMainWindow *mainwindow, CxeEngine *engine,
CxuiDocumentLoader *documentLoader,
- CxuiCaptureKeyHandler *keyHandler)
+ CxuiCaptureKeyHandler *keyHandler,
+ HbActivityManager *activityManager)
{
CX_DEBUG_ENTER_FUNCTION();
- CxuiPrecaptureView::construct(mainwindow, engine, documentLoader, keyHandler);
- mKeyHandler = keyHandler;
+ CxuiPrecaptureView::construct(mainwindow, engine, documentLoader, keyHandler, activityManager);
+ mCaptureKeyHandler = keyHandler;
mVideoCaptureControl = &(engine->videoCaptureControl());
connect(&mElapsedTimer, SIGNAL(timeout()), this, SLOT(updateTimeLabels()));
- connect(mVideoCaptureControl, SIGNAL(snapshotReady(CxeError::Id, const QPixmap&, const QString&)),
+ connect(mVideoCaptureControl, SIGNAL(snapshotReady(CxeError::Id, const QImage&, const QString&)),
this, SLOT(handleSnapshot(CxeError::Id)));
connect(mVideoCaptureControl, SIGNAL(stateChanged(CxeVideoCaptureControl::State, CxeError::Id)),
this, SLOT(handleVideoStateChanged(CxeVideoCaptureControl::State,CxeError::Id)));
+ connect(&(mEngine->settings()), SIGNAL(sceneChanged(CxeScene&)),
+ this, SLOT(handleSceneChanged(CxeScene&)));
connect(mVideoCaptureControl, SIGNAL(remainingTimeChanged()),
this, SLOT(updateTimeLabels()));
@@ -129,34 +142,105 @@
}
+/*!
+ * Loads widgets that are needed right from the start.
+ */
void CxuiVideoPrecaptureView::loadDefaultWidgets()
{
CX_DEBUG_ENTER_FUNCTION();
- CX_DEBUG_ASSERT(mDocumentLoader);
+ CX_ASSERT_ALWAYS(mDocumentLoader);
// get pointers to ui components from the layout data
QGraphicsWidget *widget = NULL;
widget = mDocumentLoader->findWidget(VIDEO_PRE_CAPTURE_VIEWFINDER);
mViewfinder = qobject_cast<HbTransparentWindow *> (widget);
- CX_DEBUG_ASSERT(mViewfinder);
-
- widget = mDocumentLoader->findWidget(VIDEO_PRE_CAPTURE_QUALITY_ICON);
- mQualityIcon = qobject_cast<HbLabel *> (widget);
- CX_DEBUG_ASSERT(mQualityIcon);
+ CX_ASSERT_ALWAYS(mViewfinder);
- widget = mDocumentLoader->findWidget(VIDEO_PRE_CAPTURE_INDICATOR_CONTAINER_TOP);
- mIndicators = qobject_cast<HbWidget *>(widget);
- CX_DEBUG_ASSERT(mIndicators);
- // Create background graphics for indicator container
- createWidgetBackgroundGraphic(mIndicators, TRANSPARENT_BACKGROUND_GRAPHIC);
+ reloadIndicatorWidgets();
CX_DEBUG_EXIT_FUNCTION();
}
+/*!
+ * Loads default indicators from docml and modifies the visibility
+ * according to current settings.
+ */
+void CxuiVideoPrecaptureView::reloadIndicatorWidgets()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ CX_ASSERT_ALWAYS(mDocumentLoader);
+
+ bool ok = false;
+ mDocumentLoader->load(VIDEO_1ST_XML, VIDEO_PRE_CAPTURE_INDICATORS_SECTION, &ok);
+ CX_ASSERT_ALWAYS(ok);
+
+ QGraphicsWidget *widget = NULL;
+ widget = mDocumentLoader->findWidget(VIDEO_PRE_CAPTURE_QUALITY_ICON);
+ mQualityIcon = qobject_cast<HbLabel *> (widget);
+ CX_ASSERT_ALWAYS(mQualityIcon);
+
+ widget = mDocumentLoader->findWidget(VIDEO_PRE_CAPTURE_VIDEOAUDIOMUTE_INDICATOR_ICON);
+ HbLabel *videoaudiomuteIndicatorIcon = qobject_cast<HbLabel *>(widget);
+ CX_ASSERT_ALWAYS(videoaudiomuteIndicatorIcon);
+
+ widget = mDocumentLoader->findWidget(VIDEO_PRE_CAPTURE_STABILITY_INDICATOR_ICON);
+ HbLabel *videoStabilityIndicatorIcon = qobject_cast<HbLabel *>(widget);
+ CX_ASSERT_ALWAYS(videoStabilityIndicatorIcon);
+
+ widget = mDocumentLoader->findWidget(VIDEO_PRE_CAPTURE_INDICATOR_CONTAINER_TOP);
+ mIndicators = qobject_cast<HbWidget *>(widget);
+ CX_ASSERT_ALWAYS(mIndicators);
+
+ QGraphicsLayout *layout = mIndicators->layout();
+ QGraphicsLayoutItem *graphicsLayoutItem = NULL;
+ QGraphicsItem *graphicsItem = NULL;
+ QString key = "";
+ int currentSettingValue = -1;
+ bool isSettingOff = false;
+ // Go through the items in the layout to check whether they should be
+ // shown or not in the indicator pane. Start from the last towards
+ // the first, so that removing items from between works correctly.
+ for (int i = layout->count() - 1; i >= 0; i--) {
+ graphicsLayoutItem = layout->itemAt(i);
+ isSettingOff = false;
+ if (graphicsLayoutItem) {
+ graphicsItem = graphicsLayoutItem->graphicsItem();
+ currentSettingValue = -1;
+ if (graphicsItem == videoaudiomuteIndicatorIcon) {
+ key = CxeSettingIds::VIDEO_MUTE_SETTING;
+ mEngine->settings().get(key, currentSettingValue);
+ // video mute implementation does not use
+ // enum for on/off values but instead
+ // 0 for off and 1 for on.
+ if (currentSettingValue == 0) {
+ isSettingOff = true;
+ }
+ } else if (graphicsItem == videoStabilityIndicatorIcon) {
+ // remove video stability indicator.
+ isSettingOff = true;
+ }
+ if (isSettingOff) {
+ layout->removeAt(i);
+ }
+ }
+ }
+
+ // Create background graphics for indicator container
+ createWidgetBackgroundGraphic(mIndicators, TRANSPARENT_BACKGROUND_GRAPHIC);
+
+ mIndicators->setVisible(true);
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * Loads widgets that are not part of the default section in layouts xml.
+ * Widgets are created at the time they are first loaded.
+ */
void CxuiVideoPrecaptureView::loadWidgets()
{
CX_DEBUG_ENTER_FUNCTION();
- CX_DEBUG_ASSERT(mDocumentLoader);
+ CX_ASSERT_ALWAYS(mDocumentLoader);
if (mWidgetsLoaded) {
CX_DEBUG(("Widgets already loaded"));
@@ -172,34 +256,34 @@
// load widgets section (creates the widgets)
mDocumentLoader->load(VIDEO_1ST_XML, VIDEO_PRE_CAPTURE_WIDGETS_SECTION, &ok);
- Q_ASSERT_X(ok, "camerax ui", "error in xml file parsing");
+ CX_ASSERT_ALWAYS(ok);
if (CxuiServiceProvider::isCameraEmbedded()) {
mDocumentLoader->load(VIDEO_1ST_XML, VIDEO_PRE_CAPTURE_EMBEDDED_SECTION, &ok);
} else {
mDocumentLoader->load(VIDEO_1ST_XML, VIDEO_PRE_CAPTURE_STANDALONE_SECTION, &ok);
}
- Q_ASSERT_X(ok, "camerax ui", "error in xml file parsing");
+ CX_ASSERT_ALWAYS(ok);
// get needed pointers to some of the widgets
widget = mDocumentLoader->findWidget(VIDEO_PRE_CAPTURE_ZOOM_SLIDER);
mSlider = qobject_cast<CxuiZoomSlider *> (widget);
- CX_DEBUG_ASSERT(mSlider);
+ CX_ASSERT_ALWAYS(mSlider);
//Let's add a plus and minus buttons to the slider
- addIncreaseDecreaseButtons(mSlider);
+ mSlider->addZoomButtons();
createWidgetBackgroundGraphic(mSlider, TRANSPARENT_BACKGROUND_GRAPHIC);
widget = mDocumentLoader->findWidget(VIDEO_PRE_CAPTURE_TOOLBAR);
- mToolBarIdle = qobject_cast<HbToolBar *> (widget);
+ mToolbarIdle = qobject_cast<HbToolBar *> (widget);
widget = mDocumentLoader->findWidget(VIDEO_PRE_CAPTURE_TOOLBAR_REC);
- mToolBarRec = qobject_cast<HbToolBar *> (widget);
+ mToolbarRec = qobject_cast<HbToolBar *> (widget);
widget = mDocumentLoader->findWidget(VIDEO_PRE_CAPTURE_TOOLBAR_PAUSED);
- mToolBarPaused = qobject_cast<HbToolBar *> (widget);
+ mToolbarPaused = qobject_cast<HbToolBar *> (widget);
- mToolBar = mToolBarIdle;
+ mToolbar = mToolbarIdle;
- CX_DEBUG_ASSERT(mToolBarIdle);
- CX_DEBUG_ASSERT(mToolBarRec);
- CX_DEBUG_ASSERT(mToolBarPaused);
+ CX_ASSERT_ALWAYS(mToolbarIdle);
+ CX_ASSERT_ALWAYS(mToolbarRec);
+ CX_ASSERT_ALWAYS(mToolbarPaused);
hideControls();
@@ -236,20 +320,20 @@
HbWidget *indicatorContainer;
widget = mDocumentLoader->findWidget(VIDEO_PRE_CAPTURE_INDICATOR_CONTAINER_BOTTOM);
indicatorContainer = qobject_cast<HbWidget *>(widget);
- CX_DEBUG_ASSERT(indicatorContainer);
+ CX_ASSERT_ALWAYS(indicatorContainer);
createWidgetBackgroundGraphic(indicatorContainer, TRANSPARENT_BACKGROUND_GRAPHIC);
widget = mDocumentLoader->findWidget(VIDEO_PRE_CAPTURE_ELAPSED_TIME_LABEL);
mElapsedTimeText = qobject_cast<HbLabel *> (widget);
- CX_DEBUG_ASSERT(mElapsedTimeText);
+ CX_ASSERT_ALWAYS(mElapsedTimeText);
widget = mDocumentLoader->findWidget(VIDEO_PRE_CAPTURE_REMAINING_TIME_LABEL);
mRemainingTimeText = qobject_cast<HbLabel *> (widget);
- CX_DEBUG_ASSERT(mRemainingTimeText);
+ CX_ASSERT_ALWAYS(mRemainingTimeText);
widget = mDocumentLoader->findWidget(VIDEO_PRE_CAPTURE_RECORDING_ICON);
mRecordingIcon = qobject_cast<HbLabel *> (widget);
- CX_DEBUG_ASSERT(mRecordingIcon);
+ CX_ASSERT_ALWAYS(mRecordingIcon);
mWidgetsLoaded = true;
@@ -262,9 +346,56 @@
mRecordingAnimation->setLoopCount(-1);
mRecordingAnimation->setEasingCurve(QEasingCurve::OutInQuad);
+
+ // Update toolbar scene mode icon.
+ QString sceneId;
+ if (mEngine->settings().get(CxeSettingIds::SCENE_ID, sceneId) == CxeError::None) {
+ updateSceneIcon(sceneId);
+ }
+
// Initialize the video time counters.
updateTimeLabels();
+ // View is ready. Needed for startup performance automated testing.
+ emit viewReady();
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * Restore view state from activity.
+ */
+void CxuiVideoPrecaptureView::restoreActivity(const QString &activityId, const QVariant &data)
+{
+ Q_UNUSED(activityId);
+ Q_UNUSED(data);
+
+ CX_DEBUG_ENTER_FUNCTION();
+ // no need to restore any state
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * Save view state to activity.
+ */
+void CxuiVideoPrecaptureView::saveActivity()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ QVariantMap data;
+ QVariantHash params;
+ //@todo: add pre-capture icon as screenshot
+ mActivityManager->removeActivity(CxuiActivityIds::VIDEO_PRECAPTURE_ACTIVITY);
+ mActivityManager->addActivity(CxuiActivityIds::VIDEO_PRECAPTURE_ACTIVITY, data, params);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * Clear activity from activity manager.
+ */
+void CxuiVideoPrecaptureView::clearActivity()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mActivityManager->removeActivity(CxuiActivityIds::VIDEO_PRECAPTURE_ACTIVITY);
CX_DEBUG_EXIT_FUNCTION();
}
@@ -278,20 +409,96 @@
mSettingsGrid = new HbToolBarExtension;
- action = mSettingsGrid->addAction(HbIcon("qtg_mono_exposure.svg"), hbTrId("txt_cam_button_exposure_compensation"), this, SLOT(launchSliderSetting()));
+ action = mSettingsGrid->addAction(HbIcon("qtg_mono_exposure"), hbTrId("txt_cam_button_exposure_compensation"), this, SLOT(launchSliderSetting()));
action->setProperty(PROPERTY_KEY_SETTING_ID, CxeSettingIds::EV_COMPENSATION_VALUE);
action->setProperty(PROPERTY_KEY_SETTING_GRID, PROPERTY_KEY_TRUE);
- action = mSettingsGrid->addAction(HbIcon("qtg_small_rgb.svg"), hbTrId("txt_cam_button_color_tone"), this, SLOT(launchSetting()));
+ action = mSettingsGrid->addAction(HbIcon("qtg_small_rgb"), hbTrId("txt_cam_button_color_tone"), this, SLOT(launchSetting()));
action->setProperty(PROPERTY_KEY_SETTING_ID, CxeSettingIds::COLOR_TONE);
action->setProperty(PROPERTY_KEY_SETTING_GRID, PROPERTY_KEY_TRUE);
- action = mSettingsGrid->addAction(HbIcon("qtg_mono_white_balance.svg"), hbTrId("txt_cam_button_white_balance"), this, SLOT(launchSetting()));
+ action = mSettingsGrid->addAction(HbIcon("qtg_mono_white_balance"), hbTrId("txt_cam_button_white_balance"), this, SLOT(launchSetting()));
action->setProperty(PROPERTY_KEY_SETTING_ID, CxeSettingIds::WHITE_BALANCE);
action->setProperty(PROPERTY_KEY_SETTING_GRID, PROPERTY_KEY_TRUE);
- connect(mKeyHandler, SIGNAL(autofocusKeyPressed()), mSettingsGrid, SLOT(close()));
+ connect(mCaptureKeyHandler, SIGNAL(autofocusKeyPressed()), mSettingsGrid, SLOT(close()));
+ }
+}
+
+/**
+* Get if postcapture view should be shown or not.
+* Postcapture view may be shown for a predefined time or
+* until user dismisses it, or it may be completely disabled.
+*/
+bool CxuiVideoPrecaptureView::isPostcaptureOn() const
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ if (CxuiServiceProvider::isCameraEmbedded()) {
+ // always show post capture in embedded mode
+ CX_DEBUG_EXIT_FUNCTION();
+ return true;
+ }
+
+ // Read the value from settings. Ignoring reading error.
+ // On error (missing settings) default to "postcapture on".
+ int showPostcapture(-1);
+ if(mEngine) {
+ mEngine->settings().get(CxeSettingIds::VIDEO_SHOWCAPTURED, showPostcapture);
}
+
+ CX_DEBUG_EXIT_FUNCTION();
+ return showPostcapture != 0; // 0 == no postcapture
+}
+
+/*!
+* Update the scene mode icon.
+* @param sceneId The new scene id.
+*/
+void CxuiVideoPrecaptureView::updateSceneIcon(const QString& sceneId)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (mEngine->mode() == Cxe::VideoMode) {
+ CX_DEBUG(("CxuiPrecaptureView - scene: %s", sceneId.toAscii().constData()));
+
+ // No need to update icon, if widgets are not even loaded yet.
+ // We'll update the icon once the widgets are loaded.
+ if (mWidgetsLoaded) {
+ QString iconObjectName = VIDEO_PRE_CAPTURE_SCENE_MODE_ACTION;
+ QString icon = getSettingItemIcon(CxeSettingIds::VIDEO_SCENE, sceneId);
+
+ CX_DEBUG(("CxuiVideoPrecaptureView - icon: %s", icon.toAscii().constData()));
+
+ if (mDocumentLoader) {
+ QObject *obj = mDocumentLoader->findObject(iconObjectName);
+ CX_ASSERT_ALWAYS(obj);
+ qobject_cast<HbAction *>(obj)->setIcon(HbIcon(icon));
+ }
+ } else {
+ CX_DEBUG(("CxuiVideoPrecaptureView - widgets not loaded yet, ignored!"));
+ }
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ Update the quality indicator
+*/
+void CxuiVideoPrecaptureView::updateQualityIcon()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (mQualityIcon && mEngine) {
+ QString icon = "";
+ int currentValue = -1;
+
+ mEngine->settings().get(CxeSettingIds::VIDEO_QUALITY, currentValue);
+ icon = getSettingItemIcon(CxeSettingIds::VIDEO_QUALITY, currentValue);
+
+ mQualityIcon->setIcon(HbIcon(icon));
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
}
void CxuiVideoPrecaptureView::handleSnapshot(CxeError::Id /*error*/)
@@ -312,7 +519,7 @@
mMenu = takeMenu();
mVideoCaptureControl->record();
} else {
- launchDiskFullNotification();
+ emit errorEncountered(CxeError::DiskFull);
}
CX_DEBUG_EXIT_FUNCTION();
@@ -335,44 +542,47 @@
void CxuiVideoPrecaptureView::stop()
{
CX_DEBUG_ENTER_FUNCTION();
- if (isPostcaptureOn()) {
- CxeVideoCaptureControl::State state = mVideoCaptureControl->state();
- if (state == CxeVideoCaptureControl::Recording ||
- state == CxeVideoCaptureControl::Paused) {
- mVideoCaptureControl->stop();
- // Continue in handleVideoStateChanged().
- }
- } else {
- // no postcapture
- stopAndPrepareNewVideo();
+
+ CxeVideoCaptureControl::State state = mVideoCaptureControl->state();
+ if (state == CxeVideoCaptureControl::Recording ||
+ state == CxeVideoCaptureControl::Paused) {
+ mVideoCaptureControl->stop();
+ // Continue in handleVideoStateChanged().
}
-
CX_DEBUG_EXIT_FUNCTION();
}
-// CxuiVideoPrecaptureView::stopAndPrepareNewVideo()
-// A version of stop that doesn't go to post-capture. When
-// not going to post-capture, we need to prepare new video
-void CxuiVideoPrecaptureView::stopAndPrepareNewVideo()
-{
- CX_DEBUG_ENTER_FUNCTION();
- mVideoCaptureControl->stop();
- mElapsedTimer.stop();
- hideControls();
- if (mMenu) {
- setMenu(mMenu);
- mMenu = NULL;
- }
+/*!
+* Allow showing UI controls?
+*/
+bool CxuiVideoPrecaptureView::allowShowControls() const
+{
+ bool show(false);
+ if (mEngine) {
+ CxeVideoCaptureControl::State state(mEngine->videoCaptureControl().state());
- // prepare new video when old one is ready
- connect(mVideoCaptureControl, SIGNAL(videoComposed(CxeError::Id, const QString&)),
- this, SLOT(prepareNewVideo(CxeError::Id)));
-
- CX_DEBUG_EXIT_FUNCTION();
+ show = (mEngine->isEngineReady()
+ || state == CxeVideoCaptureControl::Recording
+ || state == CxeVideoCaptureControl::Paused);
+ }
+ return show;
}
+/*!
+ * Play feedback when touching view outside of any widget?
+ * If video is paused feedback is off. Otherwise on.
+ */
+bool CxuiVideoPrecaptureView::isFeedbackEnabled() const
+{
+ CxeVideoCaptureControl::State state(mEngine->videoCaptureControl().state());
+ if (state == CxeVideoCaptureControl::Paused) {
+ return false;
+ } else {
+ return true;
+ }
+}
// CxuiPrecaptureView::showToolbar()
// Shows toolbar. Calls the base class implementation if not recording
@@ -381,19 +591,19 @@
{
CxeVideoCaptureControl::State state = mVideoCaptureControl->state();
if (state == CxeVideoCaptureControl::Recording) {
- if (mToolBar != mToolBarRec) {
- mToolBar->hide();
- mToolBar = mToolBarRec;
+ if (mToolbar != mToolbarRec) {
+ mToolbar->hide();
+ mToolbar = mToolbarRec;
}
} else if (state ==CxeVideoCaptureControl::Ready) {
- if (mToolBar != mToolBarIdle) {
- mToolBar->hide();
- mToolBar = mToolBarIdle;
+ if (mToolbar != mToolbarIdle) {
+ mToolbar->hide();
+ mToolbar = mToolbarIdle;
}
} else if (state == CxeVideoCaptureControl::Paused) {
- if (mToolBar != mToolBarPaused) {
- mToolBar->hide();
- mToolBar = mToolBarPaused;
+ if (mToolbar != mToolbarPaused) {
+ mToolbar->hide();
+ mToolbar = mToolbarPaused;
}
}
@@ -426,13 +636,12 @@
void CxuiVideoPrecaptureView::goToStill()
{
CX_DEBUG_ENTER_FUNCTION();
- OstTrace0( camerax_performance, DUP1_CXUIVIDEOPRECAPTUREVIEW_GOTOSTILL, "msg: e_CX_GO_TO_STILL_MODE 1" );
+ OstTrace0( camerax_performance, CXUIVIDEOPRECAPTUREVIEW_GOTOSTILL, "msg: e_CX_GO_TO_STILL_MODE 1" );
hideControls();
mEngine->initMode(ImageMode);
emit changeToPrecaptureView();
- OstTrace0( camerax_performance, DUP2_CXUIVIDEOPRECAPTUREVIEW_GOTOSTILL, "msg: e_CX_GO_TO_STILL_MODE 0" );
CX_DEBUG_EXIT_FUNCTION();
}
@@ -516,7 +725,7 @@
{
CX_DEBUG_ENTER_FUNCTION();
- TBool status = mVideoCaptureControl->elapsedTime(mTimeElapsed);
+ bool status = mVideoCaptureControl->elapsedTime(mTimeElapsed);
CX_DEBUG(("Elapsed time: %d", mTimeElapsed));
CX_DEBUG(("status: %d", status));
@@ -571,25 +780,25 @@
break;
case CxeVideoCaptureControl::Recording:
hideControls();
+ emit stopStandbyTimer();
if (mDocumentLoader){
mDocumentLoader->load(VIDEO_1ST_XML, VIDEO_PRE_CAPTURE_RECORDING);
}
mElapsedTimer.start(CXUI_ELAPSED_TIME_TIMEOUT);
disableFeedback();
- if (mRecordingAnimation && mRecordingIcon) {
- mRecordingAnimation->start();
- }
+
+ // commented out the activation of the recording animation because
+ // it is causing issues when using SW rendering
+ //if (mRecordingAnimation && mRecordingIcon) {
+ // mRecordingAnimation->start();
+ //}
+
break;
case CxeVideoCaptureControl::Paused:
mElapsedTimer.stop();
-
if (mDocumentLoader){
mDocumentLoader->load(VIDEO_1ST_XML, VIDEO_PRE_CAPTURE_PAUSED);
}
-
- if (mRecordingAnimation && mRecordingIcon) {
- mRecordingAnimation->stop();
- }
showControls();
enableFeedback();
mPauseTimer.start();
@@ -599,27 +808,34 @@
mDocumentLoader->load(VIDEO_1ST_XML, VIDEO_PRE_CAPTURE_PAUSED);
}
- if (mRecordingAnimation && mRecordingIcon) {
- mRecordingAnimation->stop();
+ // commented out the stopping of the recording animation since the activation
+ // is commented out also couple lines earlier
+ //if (mRecordingAnimation && mRecordingIcon) {
+ // mRecordingAnimation->stop();
+ //}
+
+ enableFeedback();
+ emit startStandbyTimer();
+ mElapsedTimer.stop();
+ hideControls();
+
+ if (mMenu) {
+ setMenu(mMenu);
+ mMenu = NULL;
}
- enableFeedback();
if (isPostcaptureOn()) {
- mElapsedTimer.stop();
- hideControls();
-
- if (mRecordingAnimation && mRecordingIcon) {
- mRecordingAnimation->stop();
- mRecordingIcon->setOpacity(0);
- }
- if (mMenu) {
- setMenu(mMenu);
- mMenu = NULL;
- }
-
emit changeToPostcaptureView();
+ } else {
+ // post capture off, we need prepare new video
+ // do the prepare when the previous video is ready
+ connect(mVideoCaptureControl, SIGNAL(videoComposed(CxeError::Id, const QString&)),
+ this, SLOT(prepareNewVideo(CxeError::Id)));
}
break;
+ case CxeVideoCaptureControl::PlayingStartSound:
+ // don't change anything
+ break;
default:
// in any other state, just hide the controls
setRecordingItemsVisibility(false);
@@ -629,24 +845,6 @@
CX_DEBUG_EXIT_FUNCTION();
}
-void CxuiVideoPrecaptureView::updateOrientation(Qt::Orientation orientation)
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- hideControls();
- mMainWindow->setOrientation(orientation);
-
- if (mToolBar) {
- if (orientation == Qt::Horizontal) {
- mToolBar->setOrientation(Qt::Vertical);
- } else {
- mToolBar->setOrientation(Qt::Horizontal);
- }
- }
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
void CxuiVideoPrecaptureView::handleCaptureKeyPressed()
{
CX_DEBUG_ENTER_FUNCTION();
@@ -677,19 +875,11 @@
disconnect(mVideoCaptureControl, SIGNAL(videoComposed(CxeError::Id, const QString&)),
this, SLOT(prepareNewVideo(CxeError::Id)));
} else {
- emit reportError(error);
+ emit errorEncountered(error);
}
}
-/**
-* Toggle video light on / off.
-*/
-void CxuiVideoPrecaptureView::toggleLight()
-{
- launchNotSupportedNotification();
-}
-
void CxuiVideoPrecaptureView::handleQuitClicked()
{
CX_DEBUG_ENTER_FUNCTION();
@@ -709,25 +899,6 @@
CX_DEBUG_EXIT_FUNCTION();
}
-void CxuiVideoPrecaptureView::handleFocusLost()
-{
- CX_DEBUG_IN_FUNCTION();
- // Release camera. Stopping possibly ongoing recording is handled by engine.
- releaseCamera();
-}
-
-void CxuiVideoPrecaptureView::handleBatteryEmpty()
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- CxeVideoCaptureControl::State state = mVideoCaptureControl->state();
- if (state == CxeVideoCaptureControl::Recording){
- stop(); // delete recording icon
- }
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-
void CxuiVideoPrecaptureView::launchVideoScenePopup()
{
CX_DEBUG_ENTER_FUNCTION();
@@ -771,6 +942,10 @@
// update video remaining time counter when video quality is changed
updateTimeLabels();
+ } else if (key == CxeSettingIds::GEOTAGGING) {
+ reloadIndicatorWidgets();
+ } else if (key == CxeSettingIds::VIDEO_MUTE_SETTING) {
+ reloadIndicatorWidgets();
}
}
@@ -778,6 +953,24 @@
}
/*!
+* Handle scene mode change.
+* @param scene The new active scene mode.
+*/
+void CxuiVideoPrecaptureView::handleSceneChanged(CxeScene &scene)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ // Ignore if not in video mode.
+ if (mEngine->mode() == Cxe::VideoMode) {
+ // Update toolbar scene mode icon.
+ updateSceneIcon(scene[CxeSettingIds::SCENE_ID].toString());
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+
+/*!
Sets the visibility of recording icon and elapsed time text.
\param visible True if widgets are to be shown, false if not.
*/
@@ -816,6 +1009,5 @@
return CxuiPrecaptureView::eventFilter(object, event);
}
-
+//end of file
-//end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxui/src/cxuiview.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -0,0 +1,469 @@
+/*
+* Copyright (c) 2010 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 <QGraphicsItem>
+#include <QProcess>
+#include <QGraphicsSceneEvent>
+#include <hbtoolbar.h>
+#include <hbnotificationdialog.h>
+#include <hbframeitem.h>
+#include "cxuiview.h"
+#include "cxutils.h"
+#include "cxeengine.h"
+#include "cxuidocumentloader.h"
+#include "cxuicapturekeyhandler.h"
+#include "cxecameradevicecontrol.h"
+#include "cxevideocapturecontrol.h"
+#include "cxuizoomslider.h"
+#include "cxezoomcontrol.h"
+
+// CONSTANTS
+const QString PhotosAppExe = "photos.exe";
+const QString VideosAppExe = "videoplayer.exe";
+
+/*!
+* Constructor
+*/
+CxuiView::CxuiView(QGraphicsItem *parent) :
+ HbView(parent),
+ mMainWindow(NULL),
+ mEngine(NULL),
+ mDocumentLoader(NULL),
+ mSlider(NULL),
+ mToolbar(NULL),
+ mIndicators(NULL),
+ mHideControlsTimeout(this),
+ mControlsFeedback(HbFeedback::BasicItem)
+{
+ CX_DEBUG_IN_FUNCTION();
+}
+
+/*!
+* Destructor
+*/
+CxuiView::~CxuiView()
+{
+ CX_DEBUG_IN_FUNCTION();
+}
+
+/*!
+* CxuiView::construct
+*/
+void CxuiView::construct(HbMainWindow *mainWindow, CxeEngine *engine,
+ CxuiDocumentLoader *documentLoader,
+ CxuiCaptureKeyHandler * keyHandler,
+ HbActivityManager *activityManager)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ //Minimum requirements to construct the view
+ CX_ASSERT_ALWAYS(mainWindow);
+ CX_ASSERT_ALWAYS(engine);
+ CX_ASSERT_ALWAYS(documentLoader);
+ CX_ASSERT_ALWAYS(activityManager);
+
+ mMainWindow = mainWindow;
+ mDocumentLoader = documentLoader;
+ mCaptureKeyHandler = keyHandler;
+ mEngine = engine;
+ mActivityManager = activityManager;
+
+ // adjust the timer, and connect it to correct slot
+ connect(&mHideControlsTimeout, SIGNAL(timeout()), this, SLOT(hideControls()));
+ mHideControlsTimeout.setSingleShot(true);
+ mHideControlsTimeout.setInterval(CXUI_HIDE_CONTROLS_TIMEOUT);
+
+ mControlsFeedback.setOwningWindow(mMainWindow);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Is standby mode supported / needed by this view.
+* Default implementation returns false.
+* Inherited classes need to re-implement this if standby mode is needed.
+* @return True if standby mode is supported, false otherwise.
+*/
+bool CxuiView::isStandbyModeSupported() const
+{
+ return false;
+}
+
+
+/*!
+* CxuiView::updateOrientation
+*/
+void CxuiView::updateOrientation(Qt::Orientation orientation)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ hideControls();
+ mMainWindow->setOrientation(orientation);
+
+ if (mToolbar) {
+ if (orientation == Qt::Horizontal) {
+ mToolbar->setOrientation(Qt::Vertical);
+ } else {
+ mToolbar->setOrientation(Qt::Horizontal);
+ }
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+/*!
+ * Restore view state from activity. Default implementation does nothing.
+ */
+void CxuiView::restoreActivity(const QString &activityId, const QVariant &data)
+{
+ Q_UNUSED(activityId);
+ Q_UNUSED(data);
+}
+
+/*!
+ * Save view state to activity. Default implementation does nothing.
+ */
+void CxuiView::saveActivity()
+{
+
+}
+
+/*!
+ * Clear activity from activity manager. Default implementation does nothing.
+ */
+void CxuiView::clearActivity()
+{
+
+}
+
+/*!
+* Allow showing UI controls?
+* Default behaviour is that controls can be shown at any time.
+*/
+bool CxuiView::allowShowControls() const
+{
+ return true;
+}
+
+/*!
+ * Play feedback when touching view outside of any widget?
+ * Default behaviour is that feedback is always played.
+ */
+bool CxuiView::isFeedbackEnabled() const
+{
+ return true;
+}
+
+/*!
+* Toggle visibility of UI controls.
+*/
+void CxuiView::toggleControls()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (mControlsVisible) {
+ hideControls();
+ } else {
+ showControls();
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Slot for entering standby mode.
+* By default, release camera.
+*/
+void CxuiView::enterStandby()
+{
+ CX_DEBUG_IN_FUNCTION();
+ releaseCamera();
+ CX_DEBUG_IN_FUNCTION();
+}
+
+/*!
+* Slot for exiting standby mode.
+* By default, no action needed.
+*/
+void CxuiView::exitStandby()
+{
+ CX_DEBUG_IN_FUNCTION();
+}
+
+/*!
+* CxuiView::launchNotSupportedNotification
+* Show "not supported" notification.
+*/
+void CxuiView::launchNotSupportedNotification()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ HbNotificationDialog::launchDialog("Notification", "Not supported yet");
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * CxuiView::launchScenesView
+ */
+void CxuiView::launchScenesView()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ hideControls();
+ emit showScenesView();
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * CxuiView::launchPhotosApp
+ */
+void CxuiView::launchPhotosApp()
+{
+ // Release camera device in order to free resources for Photos application
+ releaseCamera();
+ QProcess::startDetached(PhotosAppExe);
+}
+
+/*!
+ * CxuiView::launchVideosApp
+ * Launching Videos application as a separate process
+ */
+void CxuiView::launchVideosApp()
+{
+ // Release camera device in order to free resources for Videos application
+ releaseCamera();
+ QProcess::startDetached(VideosAppExe);
+}
+
+/*!
+ * Releasing camera hw
+ */
+void CxuiView::releaseCamera()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mEngine->cameraDeviceControl().release();
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * CxuiView::hideControls
+ */
+void CxuiView::hideControls()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (mHideControlsTimeout.isActive()) {
+ mHideControlsTimeout.stop();
+ }
+
+ // Hide title bar and status bar.
+ //!@todo: View flags property is missing from HbView, so can't set these in DocML.
+ HbView::HbViewFlags flags(HbView::ViewTitleBarTransparent
+ | HbView::ViewTitleBarFloating
+ | HbView::ViewTitleBarHidden
+ | HbView::ViewStatusBarTransparent
+ | HbView::ViewStatusBarFloating
+ | HbView::ViewStatusBarHidden);
+ setViewFlags(flags);
+ //!@todo: Once the flags are defined in DocML, we can just use these convenience functions
+ // to hide the title bar and status bar here.
+ //setTitleBarVisible(false);
+ //setStatusBarVisible(false);
+
+ hideZoom();
+
+ hideToolbar();
+
+ // show indicators when controls are hidden
+ showIndicators();
+
+ mControlsVisible = false;
+
+ // give the keyboard focus back to the view
+ // for the view to receive key events
+ setFocus();
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * CxuiView::showControls
+ */
+void CxuiView::showControls()
+{
+ if (allowShowControls()) {
+ // show toolbar
+ showToolbar();
+
+ // show zoom
+ showZoom();
+
+ // show title bar and status bar
+ setTitleBarVisible(true);
+ setStatusBarVisible(true);
+
+ // hide indicators when controls are shown
+ hideIndicators();
+
+ mHideControlsTimeout.start();
+ mControlsVisible = true;
+ }
+}
+
+/*!
+ * CxuiView::hideToolbar
+ */
+void CxuiView::hideToolbar()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ if (mToolbar) {
+ mToolbar->hide();
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * CxuiView::showToolbar
+ */
+void CxuiView::showToolbar()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ if (mToolbar) {
+ mToolbar->show();
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * CxuiView::hideIndicators
+ */
+void CxuiView::hideIndicators()
+{
+ if (mIndicators) {
+ mIndicators->hide();
+ }
+}
+
+/*!
+ * CxuiView::showIndicators
+ */
+void CxuiView::showIndicators()
+{
+ if (mIndicators) {
+ mIndicators->show();
+ }
+}
+
+/*!
+ * CxuiView::hideZoom
+ */
+void CxuiView::hideZoom()
+{
+ if (mSlider) {
+ mSlider->hide();
+ }
+ mZoomVisible = false;
+}
+
+/*!
+ * CxuiView::showZoom
+ */
+void CxuiView::showZoom()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ if (mSlider) {
+
+ // if maxVal has not been set yet, ask for new parameters from engine
+ if (mSlider->maximum() <= 0) {
+
+ // get the zoom range
+ int min = mEngine->zoomControl().min();
+ int max = mEngine->zoomControl().max();
+
+ // only change values if they are acceptable and have changed
+ if ((max - min > 0) && ((mSlider->maximum() != max) || (mSlider->minimum() != min))) {
+ mSlider->setRange(min, max);
+ }
+ }
+
+ // show zoom only if the slider has acceptable value
+ if (mSlider->maximum() > 0) {
+ mSlider->show();
+ }
+ }
+
+ mZoomVisible = true;
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Function can be used to create a graphics item and setting it as a background
+* item for HbWidget. graphicName refers to system wide graphic name. Given graphic
+* can consist of one, three or nine pieces. Nine piece graphics are used by default.
+* See HbFrameDrawer documentation for graphic naming.
+*/
+void CxuiView::createWidgetBackgroundGraphic(HbWidget *widget,
+ const QString &graphicName,
+ HbFrameDrawer::FrameType frameType)
+{
+ if (widget) {
+ HbFrameDrawer *drawer = new HbFrameDrawer(graphicName, frameType);
+
+ if (drawer) {
+ HbFrameItem *backgroundItem = new HbFrameItem(drawer, widget);
+ if (backgroundItem) {
+ // set item to fill the whole widget
+ backgroundItem->setGeometry(QRectF(QPointF(0, 0), widget->size()));
+ backgroundItem->setZValue(0);
+ widget->setBackgroundItem(backgroundItem);
+ }
+ }
+ }
+}
+
+/*!
+ * Handle mouse press events on this view. Needed to implement toggling of
+ * controls and playing feedback.
+ * \param event event to be handled
+ */
+void CxuiView::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ //! @todo temporary workaround for title bar mouse event handling bug
+ if (event->type() == QEvent::GraphicsSceneMousePress && event->scenePos().y() > 70 &&
+ isFeedbackEnabled()) {
+ mControlsFeedback.setModalities(HbFeedback::All);
+ mControlsFeedback.play();
+ event->accept();
+ }
+}
+
+/*!
+ * Handle mouse release events on this view. Needed to implement toggling of
+ * controls and playing feedback.
+ * \param event to be handled
+ */
+void CxuiView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+ //! @todo temporary workaround for title bar mouse event handling bug
+ if (event->type() == QEvent::GraphicsSceneMouseRelease && event->scenePos().y() > 70 &&
+ isFeedbackEnabled()) {
+ mControlsFeedback.setModalities(HbFeedback::Tactile);
+ mControlsFeedback.play();
+ toggleControls();
+ event->accept();
+ }
+}
+
+// End of file
--- a/camerauis/cameraxui/cxui/src/cxuiviewmanager.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuiviewmanager.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -17,12 +17,13 @@
#include <QDebug>
#include <QTimer>
#include <hbmainwindow.h>
-#include <coemain.h>
#include <QGraphicsSceneEvent>
-
+#include <hbstyleloader.h>
+#include <hbactivitymanager.h>
+#include <hbaction.h>
#include "cxuiapplication.h"
-#include "cxuiapplicationframeworkmonitor.h"
+#include "cxuiapplicationstate.h"
#include "cxuiviewmanager.h"
#include "cxuivideoprecaptureview.h"
#include "cxuistillprecaptureview.h"
@@ -36,217 +37,346 @@
#include "cxuienums.h"
#include "cxutils.h"
#include "cxuidocumentloader.h"
-#include "cxuistandby.h"
-#include "cxuierrormanager.h"
#include "cxesettings.h"
#include "cxememorymonitor.h"
#include "cxuiserviceprovider.h"
#include "cxuiscenemodeview.h"
+
+#ifdef Q_OS_SYMBIAN
#include "OstTraceDefinitions.h"
+
#ifdef OST_TRACE_COMPILER_IN_USE
#include "cxuiviewmanagerTraces.h"
#endif
+#endif //Q_OS_SYMBIAN
+
using namespace Cxe;
using namespace CxUiLayout;
+namespace
+{
+ static const int CXUI_STANDBY_CAMERA_TIMEOUT = 60000; // 60 seconds
+}
-// ---------------------------------------------------------------------------
-// CxuiViewManager::CxuiViewManager
-//
-// ---------------------------------------------------------------------------
-//
+
+/*!
+* Constructor.
+*/
CxuiViewManager::CxuiViewManager(CxuiApplication &application, HbMainWindow &mainWindow, CxeEngine &engine) :
mApplication(application),
mMainWindow(mainWindow),
- mStillPrecaptureView(NULL),
- mVideoPrecaptureView(NULL),
- mPostcaptureView(NULL),
mEngine(engine),
mKeyHandler(NULL),
- mApplicationMonitor(NULL),
mCameraDocumentLoader(NULL),
- mSceneModeView(NULL)
+ mApplicationState(NULL),
+ mErrorManager(NULL)
{
CX_DEBUG_ENTER_FUNCTION();
- // Application monitor
- mApplicationMonitor = new CxuiApplicationFrameworkMonitor(mApplication, mEngine.settings());
- connect(mApplicationMonitor, SIGNAL(foregroundStateChanged(CxuiApplicationFrameworkMonitor::ForegroundState)),
- this, SLOT(handleForegroundStateChanged(CxuiApplicationFrameworkMonitor::ForegroundState)));
- connect(mApplicationMonitor, SIGNAL(batteryEmpty()),
- this, SLOT(handleBatteryEmpty()));
-
- // Connect memory monitor start / stop to focused status
- connect(this, SIGNAL(focusGained()), &mEngine.memoryMonitor(), SLOT(startMonitoring()));
- connect(this, SIGNAL(focusLost()), &mEngine.memoryMonitor(), SLOT(stopMonitoring()));
+ // create mappings to map view name to correct docml file
+ mDocmlFilesByView.insert(STILL_PRE_CAPTURE_VIEW, STILL_1ST_XML);
+ mDocmlFilesByView.insert(VIDEO_PRE_CAPTURE_VIEW, VIDEO_1ST_XML);
+ mDocmlFilesByView.insert(POSTCAPTURE_VIEW, POSTCAPTURE_XML);
+ mDocmlFilesByView.insert(SCENE_MODE_VIEW, SCENEMODE_SETTING_XML);
// Key handler
mKeyHandler = new CxuiCaptureKeyHandler(mEngine);
- mMainWindow.installEventFilter(this); // in order to filter capture and AF keys
-
- OstTrace0( camerax_performance, CXUIVIEWMANAGER_CXUIVIEWMANAGER, "msg: e_CX_VIEWMANAGER_CREATE_DOCLOADER 1" );
+ // Document loader
+ OstTrace0(camerax_performance, CXUIVIEWMANAGER_CXUIVIEWMANAGER_1, "msg: e_CX_VIEWMANAGER_CREATE_DOCLOADER 1");
mCameraDocumentLoader = new CxuiDocumentLoader(&engine);
- OstTrace0( camerax_performance, DUP1_CXUIVIEWMANAGER_CXUIVIEWMANAGER, "msg: e_CX_VIEWMANAGER_CREATE_DOCLOADER 0" );
-
- // standby functionality and necessary signal connections
- mStandbyHandler = new CxuiStandby(*mKeyHandler, mCameraDocumentLoader, &mEngine);
-
- connect(mStandbyHandler, SIGNAL(aboutToEnterStandby()),this, SLOT(aboutToLooseFocus()));
- connect(mStandbyHandler, SIGNAL(aboutToExitStandby()),this, SLOT(aboutToGainFocus()));
-
- // error manager, handling errors and notifying users based on their severity
- mErrorManager = new CxuiErrorManager(*mKeyHandler, mCameraDocumentLoader);
+ OstTrace0(camerax_performance, CXUIVIEWMANAGER_CXUIVIEWMANAGER_2, "msg: e_CX_VIEWMANAGER_CREATE_DOCLOADER 0");
- // connecting necessary signals from error manager to release and init camera.
- connect(mErrorManager, SIGNAL(aboutToRecoverError()), this, SLOT(aboutToLooseFocus()));
- connect(mErrorManager, SIGNAL(errorRecovered()), this, SLOT(aboutToGainFocus()));
+ // Application state
+ mApplicationState = new CxuiApplicationState(mApplication, mEngine.settings(), mCameraDocumentLoader);
+ CX_ASSERT_ALWAYS(mApplicationState);
+ bool ok = connect(mApplicationState, SIGNAL(stateChanged(CxuiApplicationState::State, CxuiApplicationState::State)),
+ this, SLOT(handleApplicationStateChanged(CxuiApplicationState::State, CxuiApplicationState::State)));
+ Q_ASSERT_X(ok, "CxuiViewManager", "Application state change signal connect failed.");
+ connect(this, SIGNAL(standbyExitRequested()), mApplicationState, SLOT(exitStandby()), Qt::QueuedConnection);
- if (!CxuiServiceProvider::isCameraEmbedded()) {
- // For embedded mode: don't create view yet, create
- // when engine inits to correct mode
- CX_DEBUG_ASSERT(mEngine.cameraDeviceControl().cameraIndex() == Cxe::PrimaryCameraIndex);
- if (mEngine.mode() == Cxe::VideoMode) {
- createVideoPrecaptureView();
- mMainWindow.blockSignals(true);
- mMainWindow.setCurrentView(mVideoPrecaptureView, false);
- mMainWindow.blockSignals(false);
- } else {
- createStillPrecaptureView();
- mMainWindow.blockSignals(true);
- mMainWindow.setCurrentView(mStillPrecaptureView, false);
- mMainWindow.blockSignals(false);
- }
- connectPreCaptureSignals();
- }
+ // Standby timer
+ mStandbyTimer.setInterval(CXUI_STANDBY_CAMERA_TIMEOUT);
+ mStandbyTimer.setSingleShot(true);
+ connect(&mStandbyTimer, SIGNAL(timeout()), mApplicationState, SLOT(enterStandby()));
+
+ // Filter capture and AF keys and follow user activity from mouse events.
+ QCoreApplication::instance()->installEventFilter(this);
+
+ // Monitor memory on normal state, not on standby, error or background.
+ connect(this, SIGNAL(normalStateEntered()), &mEngine.memoryMonitor(), SLOT(startMonitoring()));
+ connect(this, SIGNAL(normalStateExited()), &mEngine.memoryMonitor(), SLOT(stopMonitoring()));
//connecting initmode signals
connect(&mEngine.cameraDeviceControl(), SIGNAL(initModeComplete(CxeError::Id)),
- this, SLOT(createPostcaptureView()));
-
- connect(&mEngine.cameraDeviceControl(), SIGNAL(initModeComplete(CxeError::Id)),
- mErrorManager, SLOT(analyze(CxeError::Id)));
+ mApplicationState, SLOT(handleApplicationError(CxeError::Id)));
connect(&mEngine.stillCaptureControl(), SIGNAL(imageCaptured(CxeError::Id, int)),
- mErrorManager, SLOT(analyze(CxeError::Id)));
+ mApplicationState, SLOT(handleApplicationError(CxeError::Id)));
+
+ // Register stylesheet. It will be automatically destroyed on application
+ // exit.
+ HbStyleLoader::registerFilePath(":/camerax/cxui.css");
+
+ // Create the view we are starting in, or connect signals so it
+ // will be created once we know the mode we are starting to.
+ initStartupView();
+
+ // For UI startup testing, we need to emit applicationReady signal once UI is ready to be used.
+ connect(mMainWindow.currentView(), SIGNAL(viewReady()), &mApplication, SIGNAL(applicationReady()));
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+/*!
+* Destructor.
+*/
+CxuiViewManager::~CxuiViewManager()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ QCoreApplication::instance()->removeEventFilter(this);
+
+ if (!CxuiServiceProvider::isCameraEmbedded()) {
+ currentView()->saveActivity();
+ }
+
+ delete mApplicationState;
+ delete mCameraDocumentLoader;
+ delete mKeyHandler;
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+
+/*!
+* Handle change in overall state of application.
+* @param newState The new application state.
+*/
+void CxuiViewManager::handleApplicationStateChanged(CxuiApplicationState::State newState,
+ CxuiApplicationState::State oldState)
+{
+ Q_UNUSED(oldState);
+ CX_DEBUG_ENTER_FUNCTION();
+
+ CxuiView *view = qobject_cast<CxuiView *>(mMainWindow.currentView());
+ CX_DEBUG(("CxuiViewManager - current view %d", view));
+
+ switch (newState) {
+ case CxuiApplicationState::Normal:
+ // Disable raising to foreground with capture key.
+ disconnect(mKeyHandler, SIGNAL(captureKeyPressed()), this, SLOT(toForeground()));
+
+ connectSignals(view);
+
+ CX_DEBUG(("CxuiViewManager - emitting normalStateEntered"));
+ emit normalStateEntered();
+ break;
+ case CxuiApplicationState::Standby:
+ if (view && !view->isStandbyModeSupported()) {
+ // If we move to Stanby, and current view does not
+ // support standby mode, move to Normal mode right away.
+ CX_DEBUG(("CxuiViewManager - view does not support stanbdy, exiting standby right away.."));
+ mApplicationState->exitStandby();
+ } else {
+ handleExitingNormalState();
+ }
+ break;
+ case CxuiApplicationState::Error:
+ case CxuiApplicationState::Background:
+ handleExitingNormalState();
- if (CxuiServiceProvider::isCameraEmbedded()) {
- // connect signals to set up the view after image/video prepare
+ if (newState == CxuiApplicationState::Background) {
+ // Moved to background.
+ // Bring application back to foreground by capture key press
+ connect(mKeyHandler, SIGNAL(captureKeyPressed()), this, SLOT(toForeground()));
+ }
+ break;
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Helper method to handle (possible) exiting from normal state.
+* @param oldState The previous state.
+*/
+void CxuiViewManager::handleExitingNormalState()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ // Store view that is active now.
+ CxuiView *view = qobject_cast<CxuiView *>(mMainWindow.currentView());
+ CX_DEBUG(("CxuiViewManager - current view %d", view));
+
+ // Emit signal so current view can enter standby.
+ emit normalStateExited();
+ // Disconnect signals so we don't send key event's etc.
+ // Using the view before normalStateExited() signal was emitted,
+ // just in case it caused view switch.
+ disconnectSignals(view);
+ // Make sure standby timer is not running.
+ stopStandbyTimer();
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Slot for starting standby timer.
+*/
+void CxuiViewManager::startStandbyTimer()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mStandbyTimer.start();
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Slot for stopping standby timer.
+*/
+void CxuiViewManager::stopStandbyTimer()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mStandbyTimer.stop();
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * Helper function to return current view cast to CxuiView.
+ */
+CxuiView* CxuiViewManager::currentView() const
+{
+ CxuiView *view = qobject_cast<CxuiView*> (mMainWindow.currentView());
+ CX_ASSERT_ALWAYS(view);
+ return view;
+}
+
+/*!
+* Select and initialize the view we need to start into.
+*/
+void CxuiViewManager::initStartupView()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (mApplication.activateReason() == Hb::ActivationReasonService) {
+ // For embedded mode: don't create view yet, create when engine inits to correct mode.
+ // Connect signals to set up the view after image/video prepare
connect(&mEngine.stillCaptureControl(), SIGNAL(imagePrepareComplete(CxeError::Id)),
this, SLOT(changeToPrecaptureView()));
connect(&mEngine.videoCaptureControl(), SIGNAL(videoPrepareComplete(CxeError::Id)),
this, SLOT(changeToPrecaptureView()));
- // start standby timer now because view will not be ready when viewfinder is started
- mStandbyHandler->startTimer();
+ } else if (mApplication.activateReason() == Hb::ActivationReasonActivity) {
+ // restoring activity, read startup view from stored activity
+
+ // view to start in
+ QString viewName = STILL_PRE_CAPTURE_VIEW;
+
+ bool preCapture = true;
+ QString activityId = mApplication.activateId();
+ if (activityId == CxuiActivityIds::STILL_PRECAPTURE_ACTIVITY) {
+ viewName = STILL_PRE_CAPTURE_VIEW;
+ } else if (activityId == CxuiActivityIds::STILL_POSTCAPTURE_ACTIVITY) {
+ viewName = POSTCAPTURE_VIEW;
+ preCapture = false;
+ } else if (activityId == CxuiActivityIds::VIDEO_PRECAPTURE_ACTIVITY) {
+ viewName = VIDEO_PRE_CAPTURE_VIEW;
+ } else if (activityId == CxuiActivityIds::VIDEO_POSTCAPTURE_ACTIVITY) {
+ viewName = POSTCAPTURE_VIEW;
+ preCapture = false;
+ }
+
+ CxuiView *view = createView(viewName);
+ mMainWindow.setCurrentView(view, false);
+
+ if (preCapture) {
+ connectPreCaptureSignals();
+ } else {
+ connectPostCaptureSignals();
+ }
+
+ // Check the current application state, signalled to handleApplicationStateChanged.
+ mApplicationState->startMonitoring();
+
+ // restore view from activity
+ bool ok = mApplication.activityManager()->waitActivity();
+
+ view->restoreActivity(activityId,
+ mApplication.activityManager()->activityData(mApplication.activateId()));
+
+ clearAllActivities();
+ } else {
+ // normal start
+ // no activity id, get default view from engine state
+ CxuiView *view = NULL;
+ if (mEngine.mode() == Cxe::VideoMode) {
+ view = createView(VIDEO_PRE_CAPTURE_VIEW);
+ } else {
+ view = createView(STILL_PRE_CAPTURE_VIEW);
+ }
+
+ mMainWindow.setCurrentView(view, false);
+ connectPreCaptureSignals();
+
+ // Check the current application state, signalled to handleApplicationStateChanged.
+ mApplicationState->startMonitoring();
+
+ clearAllActivities();
}
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiViewManager::~CxuiViewManager
-//
-// ---------------------------------------------------------------------------
-//
-CxuiViewManager::~CxuiViewManager()
+/*!
+* Create view and add it to main window.
+*/
+CxuiView* CxuiViewManager::createView(const QString &viewName)
{
CX_DEBUG_ENTER_FUNCTION();
- delete mCameraDocumentLoader;
- delete mKeyHandler;
- delete mApplicationMonitor;
+ OstTrace0(camerax_performance, CXUIVIEWMANAGER_CREATEVIEW_IN, "msg: e_CX_CREATE_VIEW 1");
+
+ CX_DEBUG(("View name: %s", viewName.toAscii().data()));
+
+ CxuiView* view = mViews[viewName];
+ if (view == NULL) {
+ CX_DEBUG(("View not loaded yet, loading now"));
+ bool ok = false;
+ // Use document loader to create widgets and layouts
+ // (non-sectioned parts are parsed and loaded)
+ QString docmlFile = mDocmlFilesByView[viewName];
+ CX_ASSERT_ALWAYS(mCameraDocumentLoader);
+ CX_ASSERT_ALWAYS(!docmlFile.isNull());
+
+ OstTrace0(camerax_performance, CXUIVIEWMANAGER_CREATEVIEW_2, "msg: e_CX_DOCUMENTLOADER_LOAD 1");
+ mCameraDocumentLoader->load(docmlFile, &ok);
+ OstTrace0(camerax_performance, CXUIVIEWMANAGER_CREATEVIEW_4, "msg: e_CX_DOCUMENTLOADER_LOAD 0");
+ Q_ASSERT_X(ok, "createView", "error in xml file parsing");
+
+ OstTrace0(camerax_performance, CXUIVIEWMANAGER_CREATEVIEW_6, "msg: e_CX_DOCUMENTLOADER_FINDWIDGET 1");
+ QGraphicsWidget *widget = NULL;
+ // ask for the view widget pointer
+ widget = mCameraDocumentLoader->findWidget(viewName);
+ view = qobject_cast<CxuiView *> (widget);
+ CX_ASSERT_ALWAYS(view);
+ OstTrace0(camerax_performance, CXUIVIEWMANAGER_CREATEVIEW_8, "msg: e_CX_DOCUMENTLOADER_FINDWIDGET 1");
+
+ // call for needed consturction methods
+ view->construct(&mMainWindow, &mEngine, mCameraDocumentLoader, mKeyHandler, mApplication.activityManager());
+ // .. and add to main window (which also takes ownership)
+ OstTrace0(camerax_performance, CXUIVIEWMANAGER_CREATEVIEW_10, "msg: e_CX_MAINWINDOW_ADDVIEW 1");
+ mMainWindow.addView(view);
+ mViews.insert(viewName, view);
+ OstTrace0(camerax_performance, CXUIVIEWMANAGER_CREATEVIEW_12, "msg: e_CX_MAINWINDOW_ADDVIEW 0");
+ }
+
+ OstTrace0(camerax_performance, CXUIVIEWMANAGER_CREATEVIEW_OUT, "msg: e_CX_CREATE_VIEW 0");
CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-// ---------------------------------------------------------------------------
-// CxuiViewManager::prepareWindow
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiViewManager::prepareWindow()
-{
- getPrecaptureView(mEngine.mode(), mEngine.cameraDeviceControl().cameraIndex())->prepareWindow();
-}
-
-
-// ---------------------------------------------------------------------------
-// CxuiViewManager::createStillPrecaptureView
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiViewManager::createStillPrecaptureView()
-{
- CX_DEBUG_ENTER_FUNCTION();
- OstTrace0( camerax_performance, CXUIVIEWMANAGER_CREATESTILLPRECAPTUREVIEW, "msg: e_CX_CREATE_STILLPRECAPTUREVIEW 1" );
-
- // Use document loader to create widgets and layouts
- // (non-sectioned parts are parsed and loaded)
- OstTrace0( camerax_performance, DUP2_CXUIVIEWMANAGER_ADDPRECAPTUREVIEWS, "msg: e_CX_DOCLOADER_LOAD 1" );
-
- bool ok = false;
- CX_DEBUG_ASSERT(mCameraDocumentLoader);
- mCameraDocumentLoader->load(STILL_1ST_XML, &ok);
- Q_ASSERT_X(ok, "createStillPrecaptureView", "error in xml file parsing");
-
- OstTrace0( camerax_performance, DUP2_CXUIVIEWMANAGER_CREATESTILLPRECAPTUREVIEW, "msg: e_CX_DOCLOADER_LOAD 0" );
-
- OstTrace0( camerax_performance, DUP4_CXUIVIEWMANAGER_ADDPRECAPTUREVIEWS, "msg: e_CX_DOCLOADER_FINDWIDGET 1" );
- QGraphicsWidget *widget = NULL;
- // ask for the still precapture view widget pointer
- widget = mCameraDocumentLoader->findWidget(STILL_PRE_CAPTURE_VIEW);
- mStillPrecaptureView = qobject_cast<CxuiStillPrecaptureView *> (widget);
- CX_DEBUG_ASSERT(mStillPrecaptureView);
- OstTrace0( camerax_performance, DUP5_CXUIVIEWMANAGER_ADDPRECAPTUREVIEWS, "msg: e_CX_DOCLOADER_FINDWIDGET 0" );
-
- // call for needed consturction methods
- mStillPrecaptureView->construct(&mMainWindow, &mEngine, mCameraDocumentLoader, mKeyHandler);
- // .. and add to main window (which also takes ownership)
- OstTrace0( camerax_performance, DUP1_CXUIVIEWMANAGER_MAINWINDOW_ADDVIEW, "msg: e_CX_MAINWINDOW_ADDVIEW 1" );
- mMainWindow.addView(widget);
- OstTrace0( camerax_performance, DUP2_CXUIVIEWMANAGER_MAINWINDOW_ADDVIEW, "msg: e_CX_MAINWINDOW_ADDVIEW 0" );
-
- OstTrace0( camerax_performance, DUP1_CXUIVIEWMANAGER_CREATESTILLPRECAPTUREVIEW, "msg: e_CX_CREATE_STILLPRECAPTUREVIEW 0" );
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-// ---------------------------------------------------------------------------
-// CxuiViewManager::createStillScenesView
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiViewManager::createSceneModesView()
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- bool ok = false;
- CX_DEBUG_ASSERT(mCameraDocumentLoader);
-
- // Use document loader to create widgets and layouts
- // (non-sectioned parts are parsed and loaded)
- mCameraDocumentLoader->load(SCENEMODE_SETTING_XML, &ok);
-
- QGraphicsWidget *widget = NULL;
-
- // ask for the scenes mode view widget pointer
- widget = mCameraDocumentLoader->findWidget(STILL_SCENES_VIEW);
- Q_ASSERT_X(ok && (widget != 0), "camerax ui", "invalid xml file");
- mSceneModeView = qobject_cast<CxuiSceneModeView *> (widget);
-
- // call for needed construction methods
- mSceneModeView->construct(&mMainWindow, &mEngine, mCameraDocumentLoader, mKeyHandler);
- // .. and add to main window (which also takes ownership)
- mMainWindow.addView(widget);
- mSceneModeView->loadBackgroundImages();
-
- connect(mSceneModeView, SIGNAL(viewCloseEvent()), this, SLOT(changeToPrecaptureView()));
- CX_DEBUG_EXIT_FUNCTION();
+ return view;
}
/*!
@@ -256,148 +386,70 @@
void CxuiViewManager::showScenesView()
{
CX_DEBUG_ENTER_FUNCTION();
- if (!mSceneModeView) {
- createSceneModesView();
- }
- else {
- mSceneModeView->loadBackgroundImages();
- }
- CX_DEBUG_ASSERT(mSceneModeView);
- mMainWindow.blockSignals(true);
- mMainWindow.setCurrentView(mSceneModeView, false);
- emit disableStandbyTimer();
- connectCaptureKeySignals();
- mMainWindow.blockSignals(false);
- CX_DEBUG_EXIT_FUNCTION();
-}
-
+ // Disconnect signals from old view.
+ disconnectSignals();
-// ---------------------------------------------------------------------------
-// CxuiViewManager::createVideoPrecaptureView
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiViewManager::createVideoPrecaptureView()
-{
- CX_DEBUG_ENTER_FUNCTION();
- OstTrace0( camerax_performance, CXUIVIEWMANAGER_CREATEVIDEOPRECAPTUREVIEW, "msg: e_CX_CREATE_VIDEOPRECAPTUREVIEW 1" );
-
- CX_DEBUG_ASSERT(mCameraDocumentLoader);
+ CxuiSceneModeView *view = qobject_cast<CxuiSceneModeView*>(createView(SCENE_MODE_VIEW));
+ CX_ASSERT_ALWAYS(view);
+ view->loadBackgroundImages();
- bool ok = false;
- // load and create the default widgets in video xml
- mCameraDocumentLoader->load(VIDEO_1ST_XML, &ok);
- CX_DEBUG_ASSERT(ok);
-
- // get pointer to videoprecaptureview and do some initialisation
- QGraphicsWidget *widget = NULL;
- widget = mCameraDocumentLoader->findWidget(VIDEO_PRE_CAPTURE_VIEW);
- mVideoPrecaptureView = qobject_cast<CxuiVideoPrecaptureView *> (widget);
- CX_DEBUG_ASSERT(mVideoPrecaptureView);
- mVideoPrecaptureView->construct(&mMainWindow, &mEngine, mCameraDocumentLoader, mKeyHandler);
-
- // add view to main window
- OstTrace0( camerax_performance, DUP3_CXUIVIEWMANAGER_MAINWINDOW_ADDVIEW, "msg: e_CX_MAINWINDOW_ADDVIEW 1" );
- mMainWindow.addView(mVideoPrecaptureView);
- OstTrace0( camerax_performance, DUP4_CXUIVIEWMANAGER_MAINWINDOW_ADDVIEW, "msg: e_CX_MAINWINDOW_ADDVIEW 0" );
- OstTrace0( camerax_performance, DUP1_CXUIVIEWMANAGER_CREATEVIDEOPRECAPTUREVIEW, "msg: e_CX_CREATE_VIDEOPRECAPTUREVIEW 0" );
+ mMainWindow.setCurrentView(view, false);
+ stopStandbyTimer();
+ connectSceneModeSignals();
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiViewManager::createStillPostcaptureView
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiViewManager::createPostcaptureView()
-{
- CX_DEBUG_ENTER_FUNCTION();
- CX_DEBUG_ASSERT(mCameraDocumentLoader);
- OstTrace0( camerax_performance, CXUIVIEWMANAGER_CREATESTILLPOSTCAPTUREVIEW, "msg: e_CX_CREATE_STILLPOSTCAPTUREVIEW 1" );
-
- if (!mPostcaptureView) {
- bool ok = false;
- mCameraDocumentLoader->load(POSTCAPTURE_XML, &ok);
- CX_DEBUG_ASSERT(ok);
-
- // get pointer to videoprecaptureview and do some initialisation
- QGraphicsWidget *widget = NULL;
- widget = mCameraDocumentLoader->findWidget(POSTCAPTURE_VIEW);
- mPostcaptureView = qobject_cast<CxuiPostcaptureView *> (widget);
- CX_DEBUG_ASSERT(mPostcaptureView);
- mPostcaptureView->construct(&mMainWindow, &mEngine, mCameraDocumentLoader);
-
- mMainWindow.addView(mPostcaptureView);
- connect(mPostcaptureView, SIGNAL(changeToPrecaptureView()), this, SLOT(changeToPrecaptureView()));
-
- }
-
- OstTrace0( camerax_performance, DUP1_CXUIVIEWMANAGER_CREATESTILLPOSTCAPTUREVIEW, "msg: e_CX_CREATE_STILLPOSTCAPTUREVIEW 0" );
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-// ---------------------------------------------------------------------------
-// CxuiViewManager::getPrecaptureView
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+* Get the precapture view appropriate for given camera mode and index.
+* If the view does not exist, it is created.
+* @param mode Which camera mode the view should match.
+* @param index Which camera index the view should match.
+*/
CxuiPrecaptureView*
CxuiViewManager::getPrecaptureView(Cxe::CameraMode mode, Cxe::CameraIndex camera)
{
CX_DEBUG_ENTER_FUNCTION();
- CX_DEBUG(("CxuiViewManager::getPrecaptureView() mode=%d, camera index=%d", mode, camera));
+ CX_DEBUG(("CxuiViewManager::getPrecaptureView - mode=%d, camera index=%d", mode, camera));
CX_DEBUG_ASSERT(camera == Cxe::PrimaryCameraIndex);
if (mode == ImageMode) {
- CX_DEBUG(("CxuiViewManager::getPrecaptureView() image mode"));
- if(!mStillPrecaptureView) {
- createStillPrecaptureView();
- }
- return mStillPrecaptureView;
+ CX_DEBUG(("CxuiViewManager::getPrecaptureView - image mode"));
+ return qobject_cast<CxuiPrecaptureView*>(createView(STILL_PRE_CAPTURE_VIEW));
+
} else {
- CX_DEBUG(("CxuiViewManager::getPrecaptureView() video mode"));
- if(!mVideoPrecaptureView) {
- createVideoPrecaptureView();
- }
- return mVideoPrecaptureView;
+ CX_DEBUG(("CxuiViewManager::getPrecaptureView - video mode"));
+ return qobject_cast<CxuiPrecaptureView*>(createView(VIDEO_PRE_CAPTURE_VIEW));
}
}
-CxuiDocumentLoader* CxuiViewManager::documentLoader()
-{
- return mCameraDocumentLoader;
-}
-
-// ---------------------------------------------------------------------------
-// CxuiViewManager::changeToPostcaptureView
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+* Move to post-capture view.
+*/
void CxuiViewManager::changeToPostcaptureView()
{
CX_DEBUG_ENTER_FUNCTION();
+ // Disconnect signals from old view.
+ disconnectSignals();
- if (!mPostcaptureView) {
- createPostcaptureView();
- }
+ CxuiView *postCaptureView = createView(POSTCAPTURE_VIEW);
+
+ mMainWindow.setCurrentView(postCaptureView, false);
- mMainWindow.blockSignals(true);
- mMainWindow.setCurrentView(mPostcaptureView, false);
- mMainWindow.blockSignals(false);
-
- // connecting all necessary signals for postcapture view
- connectPostCaptureSignals();
+ // Connecting all necessary signals for postcapture view.
+ // Not connected yet if not in normal state. We connect the signals
+ // once we enter normal state again.
+ if (mApplicationState->currentState() == CxuiApplicationState::Normal) {
+ connectPostCaptureSignals();
+ }
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiViewManager::changeToPrecaptureView
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+* Move to pre-capture view.
+*/
void CxuiViewManager::changeToPrecaptureView()
{
CX_DEBUG_ENTER_FUNCTION();
@@ -410,25 +462,43 @@
this, SLOT(changeToPrecaptureView()));
}
- HbView *view = getPrecaptureView(mEngine.mode(),
- mEngine.cameraDeviceControl().cameraIndex());
+ // If normal mode is not active, don't switch to precapture view and reserve camera now.
+ if (mApplicationState->currentState() != CxuiApplicationState::Normal) {
+ CX_DEBUG(("CxuiViewManager - Change to precapture blocked as not normal mode (error, standby, background)."));
+ } else {
+
+ // Disconnect signals from old view.
+ disconnectSignals();
+
+ HbView *view = getPrecaptureView(mEngine.mode(),
+ mEngine.cameraDeviceControl().cameraIndex());
+ mMainWindow.setCurrentView(view, false);
- mMainWindow.blockSignals(true);
- mMainWindow.setCurrentView(view, false);
- mMainWindow.blockSignals(false);
+ // Release resources needed by scene view.
+ HbView *sceneView = mViews.take(SCENE_MODE_VIEW);
+ if (sceneView) {
+ // This will not delete the view.
+ mMainWindow.removeView(sceneView);
+ // We can get to this slot from scene view, so don't delete the object too early.
+ sceneView->deleteLater();
+ sceneView = NULL;
+ }
- // connecting necessary pre-capture view signals
- connectPreCaptureSignals();
- emit startStandbyTimer();
+ // connecting necessary pre-capture view signals
+ connectPreCaptureSignals();
+ // Make sure engine prepares for new image/video if necessary
+ mEngine.initMode(mEngine.mode());
+
+ startStandbyTimer();
+
+ }
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiViewManager::switchCamera
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+* Switch between cameras.
+*/
void CxuiViewManager::switchCamera()
{
CX_DEBUG_ENTER_FUNCTION();
@@ -445,12 +515,8 @@
}
CxuiPrecaptureView* view = getPrecaptureView(mEngine.mode(), nextCamera);
-
- mMainWindow.blockSignals(true);
mMainWindow.setCurrentView(view, false);
- mMainWindow.blockSignals(false);
view->updateOrientation(nextViewOrientation);
- view->prepareWindow();
connectPreCaptureSignals();
@@ -459,34 +525,201 @@
CX_DEBUG_EXIT_FUNCTION();
}
-// ---------------------------------------------------------------------------
-// CxuiViewManager::eventFilter
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+* Event filter function.
+* Used to get mouse and key events for standby and capture key handling.
+* @param object Target object.
+* @param event Event to be checked.
+*/
bool CxuiViewManager::eventFilter(QObject *object, QEvent *event)
{
Q_UNUSED(object)
bool eventWasConsumed = false;
+ bool userActivity = false;
- switch (event->type())
- {
+ switch (event->type()) {
case QEvent::KeyPress:
case QEvent::KeyRelease:
+ userActivity = true;
eventWasConsumed = mKeyHandler->handleKeyEvent(event);
+ if (eventWasConsumed && mApplicationState->currentState() == CxuiApplicationState::Standby) {
+ // Queued exit from standby.
+ emit standbyExitRequested();
+ }
+ break;
+
+ case QEvent::GraphicsSceneMouseMove:
+ case QEvent::GraphicsSceneMousePress:
+ userActivity = true;
+ break;
+ case QEvent::GraphicsSceneMouseRelease:
+ userActivity = true;
+ if (mApplicationState->currentState() == CxuiApplicationState::Standby) {
+ // Queued exit from standby.
+ // Standby popup in view can receive mouse event before it is dismissed.
+ emit standbyExitRequested();
+ }
break;
}
+
+ // Restart standby timer if there is user activity.
+ // Only restart the timer if it is running, do not set it running here.
+ if (userActivity && mStandbyTimer.isActive()) {
+ startStandbyTimer();
+ }
+
// No need to call base class implementation, because we derive from QObject directly.
// QObject::eventFilter() implementation always returns false.
return eventWasConsumed;
}
-// ---------------------------------------------------------------------------
-// CxuiViewManager::connectCaptureKeySignals
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+* Connect signals specific to given view.
+*/
+void CxuiViewManager::connectSignals(QObject *view)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXUIVIEWMANAGER_CONNECTSIGNALS_1, "msg: e_CX_VIEWMANAGER_CONNECT_SIGNALS 1");
+
+ if (view) {
+ if (view == mViews[POSTCAPTURE_VIEW]) {
+ connectPostCaptureSignals();
+ } else if (view == mViews[SCENE_MODE_VIEW]) {
+ connectSceneModeSignals();
+ } else {
+ connectPreCaptureSignals();
+ }
+ }
+
+ OstTrace0(camerax_performance, CXUIVIEWMANAGER_CONNECTSIGNALS_2, "msg: e_CX_VIEWMANAGER_CONNECT_SIGNALS 0");
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Disconnect signals.
+* We don't want to send or receive signals with inactive views, so this is done every time changing a view.
+* @param view View object from which signals are disconnected. If NULL is given, current view is used.
+*/
+void CxuiViewManager::disconnectSignals(QObject *view)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ OstTrace0(camerax_performance, CXUIVIEWMANAGER_DISCONNECT_1, "msg: e_CX_VIEWMANAGER_DISCONNECT_SIGNALS 1");
+
+ // Disconnect all existing capture key signals
+ mKeyHandler->disconnect();
+
+ if (!view) {
+ // If view is not given, take current view.
+ view = mMainWindow.currentView();
+ }
+
+ CX_DEBUG(("CxuiViewManager - disconnecting from view %d", view));
+ if (view) {
+ // Disconnect all signals from current view to us.
+ disconnect(view, 0, this, 0);
+ // Disconnect all signals from us to current view.
+ disconnect(this, 0, view, 0);
+ }
+
+ OstTrace0(camerax_performance, CXUIVIEWMANAGER_DISCONNECT_2, "msg: e_CX_VIEWMANAGER_DISCONNECT_SIGNALS 0");
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Connect signals to pre-capture view.
+*/
+void CxuiViewManager::connectPreCaptureSignals()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ disconnectSignals();
+
+ HbView *currentView = mMainWindow.currentView();
+
+ if (currentView != mViews[POSTCAPTURE_VIEW]) {
+ // connects all capture key signals.
+ connectCaptureKeySignals();
+
+ // connecting pre-capture view signals to standby timer.
+ connect(currentView, SIGNAL(startStandbyTimer()), this, SLOT(startStandbyTimer()), Qt::UniqueConnection);
+ connect(currentView, SIGNAL(stopStandbyTimer()), this, SLOT(stopStandbyTimer()), Qt::UniqueConnection);
+ connect(currentView, SIGNAL(changeToPrecaptureView()), this, SLOT(startStandbyTimer()), Qt::UniqueConnection);
+ connect(currentView, SIGNAL(changeToPostcaptureView()), this, SLOT(stopStandbyTimer()), Qt::UniqueConnection);
+
+ // connecting pre-capture view signals to viewmanager slots
+ connect(currentView, SIGNAL(changeToPostcaptureView()), this, SLOT(changeToPostcaptureView()), Qt::UniqueConnection);
+ connect(currentView, SIGNAL(changeToPrecaptureView()), this, SLOT(changeToPrecaptureView()), Qt::UniqueConnection);
+
+ //connecting scene modes signal
+ connect(currentView, SIGNAL(showScenesView()), this, SLOT(showScenesView()), Qt::UniqueConnection);
+
+ connect(currentView, SIGNAL(switchCamera()), this, SLOT(switchCamera()), Qt::UniqueConnection);
+
+ // connecting error signals from precapture view to application state.
+ connect(currentView, SIGNAL(errorEncountered(CxeError::Id)),
+ mApplicationState, SLOT(handleApplicationError(CxeError::Id)),
+ Qt::UniqueConnection);
+
+ // Standby signals
+ connect(this, SIGNAL(normalStateEntered()), currentView, SLOT(exitStandby()), Qt::UniqueConnection);
+ connect(this, SIGNAL(normalStateExited()), currentView, SLOT(enterStandby()), Qt::UniqueConnection);
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Connect signals to post-capture view.
+*/
+void CxuiViewManager::connectPostCaptureSignals()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ disconnectSignals();
+ QObject *currentView = mMainWindow.currentView();
+ if (currentView == mViews[POSTCAPTURE_VIEW]) {
+
+ connect(currentView, SIGNAL(changeToPrecaptureView()), this, SLOT(changeToPrecaptureView()), Qt::UniqueConnection);
+
+ // Standby signals
+ connect(this, SIGNAL(normalStateEntered()), currentView, SLOT(exitStandby()), Qt::UniqueConnection);
+ connect(this, SIGNAL(normalStateExited()), currentView, SLOT(enterStandby()), Qt::UniqueConnection);
+
+ // connect necessary capturekey signals
+ connectCaptureKeySignals();
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Connect signals to scene mode view.
+*/
+void CxuiViewManager::connectSceneModeSignals()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ disconnectSignals();
+
+ HbView *currentView = mMainWindow.currentView();
+
+ if (currentView == mViews[SCENE_MODE_VIEW]) {
+
+ connectCaptureKeySignals();
+
+ // Standby signals for releasing camera
+ connect(this, SIGNAL(normalStateEntered()), currentView, SLOT(exitStandby()));
+ connect(this, SIGNAL(normalStateExited()), currentView, SLOT(enterStandby()));
+
+ // Moving back to pre-capture view
+ connect(currentView, SIGNAL(viewCloseEvent()), this, SLOT(changeToPrecaptureView()));
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Connect key handler capture key signals.
+*/
void CxuiViewManager::connectCaptureKeySignals()
{
CX_DEBUG_ENTER_FUNCTION();
@@ -508,104 +741,16 @@
CX_DEBUG_EXIT_FUNCTION();
}
-
-// ---------------------------------------------------------------------------
-// CxuiViewManager::connectPreCaptureSignals
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiViewManager::connectPreCaptureSignals()
+/*!
+ * Clears all camera activities from activity manager.
+ */
+void CxuiViewManager::clearAllActivities()
{
- CX_DEBUG_ENTER_FUNCTION();
-
- disconnectSignals();
-
- QObject *currentView = mMainWindow.currentView();
-
- if (currentView != mPostcaptureView) {
- // connects all capture key signals.
- connectCaptureKeySignals();
-
- // connecting view manager focus events to pre-capture views
- connect(this, SIGNAL(focusGained()), currentView, SLOT(handleFocusGained()), Qt::UniqueConnection);
- connect(this, SIGNAL(focusLost()), currentView, SLOT(handleFocusLost()), Qt::UniqueConnection);
- connect(this, SIGNAL(batteryEmpty()), currentView, SLOT(handleBatteryEmpty()), Qt::UniqueConnection);
-
- // in standby mode, we are interested in focus gain events for dismissing standby
- connect(this, SIGNAL(focusGained()), mStandbyHandler, SLOT(handleMouseEvent()), Qt::UniqueConnection);
-
- // connecting key events to standby.
- connect(mKeyHandler, SIGNAL(autofocusKeyPressed()), mStandbyHandler, SLOT(stopTimer()), Qt::UniqueConnection);
- connect(mKeyHandler, SIGNAL(autofocusKeyReleased()), mStandbyHandler, SLOT(startTimer()), Qt::UniqueConnection);
- connect(mKeyHandler, SIGNAL(captureKeyPressed()), mStandbyHandler, SLOT(startTimer()), Qt::UniqueConnection);
- connect(mKeyHandler, SIGNAL(captureKeyReleased()), mStandbyHandler, SLOT(startTimer()), Qt::UniqueConnection);
- connect(this, SIGNAL(disableStandbyTimer()), mStandbyHandler, SLOT(stopTimer()), Qt::UniqueConnection);
- connect(this, SIGNAL(startStandbyTimer()), mStandbyHandler, SLOT(startTimer()), Qt::UniqueConnection);
-
- // connecting pre-capture view signals to standby.
- connect(currentView, SIGNAL(startStandbyTimer()), mStandbyHandler, SLOT(startTimer()), Qt::UniqueConnection);
- connect(currentView, SIGNAL(changeToPrecaptureView()), mStandbyHandler, SLOT(startTimer()), Qt::UniqueConnection);
- connect(currentView, SIGNAL(stopStandbyTimer()), mStandbyHandler, SLOT(stopTimer()), Qt::UniqueConnection);
- connect(currentView, SIGNAL(changeToPostcaptureView()), mStandbyHandler, SLOT(stopTimer()), Qt::UniqueConnection);
-
- // connecting precapture view signals to viewmanager slots
- connect(currentView, SIGNAL(changeToPostcaptureView()), this, SLOT(changeToPostcaptureView()), Qt::UniqueConnection);
- connect(currentView, SIGNAL(changeToPrecaptureView()), this, SLOT(changeToPrecaptureView()), Qt::UniqueConnection);
-
- //connecting scene modes signal
- connect(currentView, SIGNAL(showScenesView()), this, SLOT(showScenesView()), Qt::UniqueConnection);
-
- connect(currentView, SIGNAL(switchCamera()), this, SLOT(switchCamera()), Qt::UniqueConnection);
-
- // connecting error signals from precapture view to errormanager.
- connect(currentView, SIGNAL(reportError(CxeError::Id)), mErrorManager, SLOT(analyze(CxeError::Id)), Qt::UniqueConnection);
- }
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-// ---------------------------------------------------------------------------
-// CxuiViewManager::connectPostCaptureSignals
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiViewManager::connectPostCaptureSignals()
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- disconnectSignals();
- QObject *currentView = mMainWindow.currentView();
- if (currentView == mPostcaptureView) {
- // connecting view manager focus events to pre-capture views
- connect(this, SIGNAL(focusGained()), currentView, SLOT(startTimers()), Qt::UniqueConnection);
- connect(this, SIGNAL(focusLost()), currentView, SLOT(handleFocusLost()), Qt::UniqueConnection);
- connect(currentView, SIGNAL(changeToPrecaptureView()), mStandbyHandler, SLOT(startTimer()), Qt::UniqueConnection);
-
- // connect necessary capturekey signals
- connectCaptureKeySignals();
- }
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-
-/*
-* CxuiViewManager::disconnectPreCaptureSignals
-*/
-void CxuiViewManager::disconnectSignals()
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- // Disconnect all existing capture key signals
- mKeyHandler->disconnect();
-
- disconnect(SIGNAL(focusGained()));
- disconnect(SIGNAL(focusLost()));
- disconnect(SIGNAL(batteryEmpty()));
-
- CX_DEBUG_EXIT_FUNCTION();
+ HbActivityManager *activityManager = mApplication.activityManager();
+ activityManager->removeActivity(CxuiActivityIds::STILL_PRECAPTURE_ACTIVITY);
+ activityManager->removeActivity(CxuiActivityIds::STILL_POSTCAPTURE_ACTIVITY);
+ activityManager->removeActivity(CxuiActivityIds::VIDEO_PRECAPTURE_ACTIVITY);
+ activityManager->removeActivity(CxuiActivityIds::VIDEO_POSTCAPTURE_ACTIVITY);
}
/*!
@@ -615,10 +760,9 @@
{
CX_DEBUG_ENTER_FUNCTION();
- if (mApplicationMonitor
- && mApplicationMonitor->foregroundState() == CxuiApplicationFrameworkMonitor::ForegroundFullyLost) {
+ if (mApplicationState->currentState() == CxuiApplicationState::Background) {
// Bring to foreground and gain focus.
- CX_DEBUG(("CxuiViewManager - fully in background, bringing to foreground now."));
+ CX_DEBUG(("CxuiViewManager - in background, bringing to foreground now."));
mMainWindow.raise();
mMainWindow.activateWindow();
}
@@ -626,78 +770,4 @@
CX_DEBUG_EXIT_FUNCTION();
}
-/*!
-* Handle change in foreground state.
-*/
-void CxuiViewManager::handleForegroundStateChanged(CxuiApplicationFrameworkMonitor::ForegroundState state)
-{
- switch (state) {
- case CxuiApplicationFrameworkMonitor::ForegroundPartiallyLost:
- break;
- case CxuiApplicationFrameworkMonitor::ForegroundFullyLost:
- aboutToLooseFocus();
- break;
- case CxuiApplicationFrameworkMonitor::ForegroundOwned:
- aboutToGainFocus();
- break;
- }
-}
-
-// ---------------------------------------------------------------------------
-// CxuiViewManager::aboutToLooseFocus()
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiViewManager::aboutToLooseFocus()
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- emit focusLost();
- disconnectSignals();
-
- // We do not stop listening to capture key events even if we go to background,
- // as capture key brings us back to foreground.
- connect(mKeyHandler, SIGNAL(captureKeyPressed()), this, SLOT(toForeground()));
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-// ---------------------------------------------------------------------------
-// CxuiViewManager::aboutToGainFocus
-//
-// ---------------------------------------------------------------------------
-//
-void CxuiViewManager::aboutToGainFocus()
-{
- CX_DEBUG_ENTER_FUNCTION();
-
- // Disconnect capture key event and bringing us to foreground connection (if there is one).
- disconnect(mKeyHandler, SIGNAL(captureKeyPressed()), this, SLOT(toForeground()));
-
- // we are getting the focus.
- if (mMainWindow.currentView() != mPostcaptureView) {
- connectPreCaptureSignals();
- } else {
- connectPostCaptureSignals();
- }
-
- if (mKeyHandler) {
- mKeyHandler->listenKeys(true);
- }
- emit focusGained();
-
- CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Handle battery emptying
-*/
-void CxuiViewManager::handleBatteryEmpty()
-{
- CX_DEBUG_ENTER_FUNCTION();
- emit batteryEmpty();
- CX_DEBUG_EXIT_FUNCTION();
-}
-
// end of file
--- a/camerauis/cameraxui/cxui/src/cxuizoomslider.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/cxuizoomslider.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -55,3 +55,22 @@
// underneath this slider
event->accept();
}
+
+/*!
+* Adding zoom buttons to the slider
+*/
+void CxuiZoomSlider::addZoomButtons()
+{
+ // get current slider elements
+ QList<QVariant> elements = sliderElements();
+
+ // add increase and decrease elements to the slider
+ elements << HbSlider::IncreaseElement << HbSlider::DecreaseElement;
+ setSliderElements(elements);
+
+ // set icons for the increase and decrease element
+ setElementIcon(HbSlider::DecreaseElement , HbIcon("qtg_mono_minus"));
+ setElementIcon(HbSlider::IncreaseElement , HbIcon("qtg_mono_plus"));
+}
+
+//End of file
--- a/camerauis/cameraxui/cxui/src/main.cpp Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/cxui/src/main.cpp Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -15,34 +15,39 @@
*
*/
-#include <coemain.h>
-#include <eikenv.h>
#include <QApplication>
#include <QGraphicsProxyWidget>
// needed for localization
-#include <QTranslator>
#include <QLocale>
+#include <HbTranslator>
#include <hbmainwindow.h>
-#include <xqserviceutil.h>
+
+#ifdef Q_OS_SYMBIAN
+#include <coemain.h>
+#include <eikenv.h>
+#endif // Q_OS_SYMBIAN
#include "cxeengine.h"
#include "cxecameradevicecontrol.h"
#include "cxuiapplication.h"
#include "cxuiviewmanager.h"
+#include "cxuiapplicationstate.h"
+#include "cxuienums.h"
#include "cxutils.h"
#include "cxuiserviceprovider.h"
+#ifdef Q_OS_SYMBIAN
#include "OstTraceDefinitions.h"
#ifdef OST_TRACE_COMPILER_IN_USE
#include "mainTraces.h"
-#endif
+#endif // OST_TRACE_COMPILER_IN_USE
+#endif // Q_OS_SYMBIAN
using namespace Cxe;
// CONSTANTS
-const QString TRANSLATIONS_PATH = "z:/resource/qt/translations/";
-const QString TRANSLATIONS_FILE_NAME = "camera_";
-const QString COMMON_TRANSLATIONS_FILE_NAME = "common_";
+const QString TRANSLATIONS_PATH = "/resource/qt/translations/";
+const QString TRANSLATIONS_FILE = "camera";
int main(int argc, char *argv[])
{
@@ -51,6 +56,11 @@
Q_INIT_RESOURCE(cxui);
+ // Use software rendering / raster graphics system to save GPU memory.
+ CX_DEBUG(("CxUI: Take raster graphics system into use.."));
+ QApplication::setGraphicsSystem("raster");
+ CX_DEBUG(("CxUI: ..raster graphics system in use"));
+
OstTrace0( camerax_performance, DUP1__MAIN, "msg: e_CX_HBAPP_CREATION 1" );
CxuiApplication app(argc, argv);
OstTrace0( camerax_performance, DUP2__MAIN, "msg: e_CX_HBAPP_CREATION 0" );
@@ -59,76 +69,97 @@
// Reserve and power on can then proceed in parallel with
// ui construction.
OstTrace0( camerax_performance, DUP7__MAIN, "msg: e_CX_CREATE_ENGINE 1" );
- CxeEngine *eng = CxeEngine::createEngine();
+ CxeEngine *engine = CxeEngine::createEngine();
OstTrace0( camerax_performance, DUP8__MAIN, "msg: e_CX_CREATE_ENGINE 0" );
- if (XQServiceUtil::isService()) {
+ if (app.activateReason() == Hb::ActivationReasonService) {
+ CX_DEBUG(("CxUI: Camera started as service"));
// Embedded mode. Engine is inited to correct mode
// by service provider when request arrives
CX_DEBUG(("CxUI: creating serviceprovider"));
- CxuiServiceProvider::create(eng);
+ CxuiServiceProvider::create(engine);
CX_DEBUG(("CxUI: done"));
- } else {
- // Normal mode. Init engine now.
- OstTrace0( camerax_performance, DUP9__MAIN, "msg: e_CX_INIT_ENGINE 1" );
- //! @todo temporarily commented as part of a hack to change the startup sequence
- // to avoid GOOM issues
- //eng->initMode(Cxe::ImageMode);
- OstTrace0( camerax_performance, DUP10__MAIN, "msg: e_CX_INIT_ENGINE 0" );
- }
-
- // Load the language specific localization files: application + common
- OstTrace0( camerax_performance, DUP3__MAIN, "msg: e_CX_LOAD_TRANSLATIONS 1" );
- QTranslator translator;
- QString lang = QLocale::system().name();
+ } else if (app.activateReason() == Hb::ActivationReasonActivity) {
+ CX_DEBUG(("CxUI: Camera started as activity"));
+ Cxe::CameraMode mode = Cxe::ImageMode;
+ QString activityId = app.activateId();
+ if (activityId == CxuiActivityIds::VIDEO_PRECAPTURE_ACTIVITY ||
+ activityId == CxuiActivityIds::VIDEO_POSTCAPTURE_ACTIVITY) {
+ mode = Cxe::VideoMode;
+ }
- CX_DEBUG(("CxUI: loading translation"));
- bool ret = false;
- ret = translator.load(TRANSLATIONS_PATH + TRANSLATIONS_FILE_NAME + lang);
- CX_DEBUG(("load ok=%d", ret));
- app.installTranslator( &translator );
+ if (activityId == CxuiActivityIds::STILL_PRECAPTURE_ACTIVITY ||
+ activityId == CxuiActivityIds::VIDEO_PRECAPTURE_ACTIVITY) {
+ // init engine only if going to pre-capture
+ engine->initMode(mode);
+ } else {
+ // in post-capture don't init but set the correct mode to engine
+ // so init can be done later
+ engine->setMode(mode);
+ }
+ } else {
+ CX_DEBUG(("CxUI: Camera started as normal app"));
+ // normal start
+ engine->initMode(engine->mode());
+ }
- QTranslator commonTranslator;
- CX_DEBUG(("CxUI: loading common translation"));
- ret = false;
- ret = commonTranslator.load(TRANSLATIONS_PATH + COMMON_TRANSLATIONS_FILE_NAME + lang);
- CX_DEBUG(("load ok=%d", ret));
- app.installTranslator(&commonTranslator);
+#ifdef Q_OS_SYMBIAN
+ //!@todo: Yield run time to system to get enough resources released to start camera.
+ CX_DEBUG(("CxUI: yield control for resource freeing.."));
+ User::After(2*1000*1000); // 2s
+ CX_DEBUG(("CxUI: waiting done.."));
+#endif // Q_OS_SYMBIAN
+
+ // Load language specific application localization file, e.g. "camera_en.qm"
+ // Translations need to be loaded before any widgets are created.
+ CX_DEBUG(("CxUI: Load translations.."));
+ OstTrace0( camerax_performance, DUP3__MAIN, "msg: e_CX_LOAD_TRANSLATIONS 1" );
+ HbTranslator translator(TRANSLATIONS_PATH, TRANSLATIONS_FILE);
+ // Load language specific common localization file
+ translator.loadCommon();
OstTrace0( camerax_performance, DUP4__MAIN, "msg: e_CX_LOAD_TRANSLATIONS 0" );
+ CX_DEBUG(("CxUI: ..translations loaded"));
+ // Create main window
OstTrace0( camerax_performance, DUP5__MAIN, "msg: e_CX_MAINWINDOW_CREATION 1" );
- HbMainWindow *mainWindow = new HbMainWindow(0, Hb::WindowFlagTransparent |
- Hb::WindowFlagNoBackground);
- mainWindow->setAttribute(Qt::WA_NoBackground);
+ HbMainWindow mainWindow(0, Hb::WindowFlagTransparent | Hb::WindowFlagNoBackground);
+ mainWindow.setAttribute(Qt::WA_NoBackground);
OstTrace0( camerax_performance, DUP6__MAIN, "msg: e_CX_MAINWINDOW_CREATION 0" );
- OstTrace0( camerax_performance, DUP11__MAIN, "msg: e_CX_CREATE_VIEW_MANAGER 1" );
- CxuiViewManager *viewManager = new CxuiViewManager(app, *mainWindow, *eng);
- OstTrace0( camerax_performance, DUP12__MAIN, "msg: e_CX_CREATE_VIEW_MANAGER 0" );
-
+ // Set main window to landscape and full screen
OstTrace0( camerax_performance, DUP13__MAIN, "msg: e_CX_MAINWINDOW_SETORIENTATION 1" );
- mainWindow->setOrientation(Qt::Horizontal);
+ mainWindow.setOrientation(Qt::Horizontal);
OstTrace0( camerax_performance, DUP14__MAIN, "msg: e_CX_MAINWINDOW_SETORIENTATION 0" );
+ OstTrace0( camerax_performance, DUP15__MAIN, "msg: e_CX_MAINWINDOW_FULLSCREEN 1" );
- OstTrace0( camerax_performance, DUP15__MAIN, "msg: e_CX_MAINWINDOW_FULLSCREEN 1" );
- mainWindow->showFullScreen();
+#ifdef Q_OS_SYMBIAN
+ mainWindow.showFullScreen();
+#else
+ /*
+ * todo : check if this is an Orbit bug or if there's a better solution
+ */
+ mainWindow.resize(640, 360);
+ mainWindow.setOrientation(Qt::Vertical, false);
+ mainWindow.show();
+ mainWindow.setOrientation(Qt::Horizontal, false);
+#endif //Q_OS_SYMBIAN
OstTrace0( camerax_performance, DUP16__MAIN, "msg: e_CX_MAINWINDOW_FULLSCREEN 0" );
+ // Create view manager
+ OstTrace0( camerax_performance, DUP11__MAIN, "msg: e_CX_CREATE_VIEW_MANAGER 1" );
+ CxuiViewManager *viewManager = new CxuiViewManager(app, mainWindow, *engine);
+ OstTrace0( camerax_performance, DUP12__MAIN, "msg: e_CX_CREATE_VIEW_MANAGER 0" );
+
+ // Give main window id to engine for setting up viewfinder window behind it
OstTrace0( camerax_performance, DUP17__MAIN, "msg: e_CX_PREPAREWINDOW 1" );
- viewManager->prepareWindow();
+ engine->viewfinderControl().setWindow(mainWindow.effectiveWinId());
OstTrace0( camerax_performance, DUP18__MAIN, "msg: e_CX_PREPAREWINDOW 0" );
- //! @todo initMode call added here as a temporary hack to change the startup sequence
- // in order to avoid GOOM issues
- User::After(2000000);
- eng->initMode(Cxe::ImageMode);
+
int returnValue = app.exec();
- // delete service provider instance
- CxuiServiceProvider::destroy();
-
delete viewManager;
- delete mainWindow;
- delete eng;
+ CxuiServiceProvider::destroy(); // delete service provider instance
+ delete engine;
return returnValue;
}
--- a/camerauis/cameraxui/rom/camerax.iby Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/rom/camerax.iby Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -23,13 +23,13 @@
// Ui
S60_APP_EXE(cxui)
data = DATAZ_\private\10003a3f\import\apps\cxui_reg.rsc \private\10003a3f\import\apps\cxui_reg.rsc
-data = DATAZ_\APP_RESOURCE_DIR\cxui.mif APP_RESOURCE_DIR\cxui.mif
// Sounds
data = DATAZ_\system\sounds\digital\capture.wav system\sounds\digital\capture.wav
data = DATAZ_\system\sounds\digital\videoStart.wav system\sounds\digital\videoStart.wav
data = DATAZ_\system\sounds\digital\videoStop.wav system\sounds\digital\videoStop.wav
data = DATAZ_\system\sounds\digital\autoFocus.wav system\sounds\digital\autoFocus.wav
+data = DATAZ_\system\sounds\digital\selftimer.wav system\sounds\digital\selftimer.wav
// CR key files
data = DATAZ_\private\10202be9\20027017.txt private\10202be9\20027017.txt
--- a/camerauis/cameraxui/rom/camerax_stub.pkg Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/rom/camerax_stub.pkg Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
;
-; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; Copyright (c) 2009-2010 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"
@@ -30,5 +30,4 @@
"" - "z:\sys\bin\cxui.exe"
"" - "z:\resource\apps\cxui.r*"
"" - "z:\private\10003a3f\import\apps\cxui_reg.rsc"
-"" - "z:\resource\apps\cxui.mif"
"" - "z:\sys\bin\cxengine.dll"
Binary file camerauis/cameraxui/rom/camerax_stub.sis has changed
--- a/camerauis/cameraxui/rom/cameraxresources.iby Thu May 13 21:30:19 2010 +0300
+++ b/camerauis/cameraxui/rom/cameraxresources.iby Thu Jul 15 01:55:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -20,9 +20,7 @@
#include <data_caging_paths_for_iby.hrh>
-data=DATAZ_\APP_RESOURCE_DIR\camera.rsc APP_RESOURCE_DIR\camera.rsc
-
-data=DATAZ_\QT_TRANSLATIONS_DIR\camera.qm QT_TRANSLATIONS_DIR\camera.qm
+data=DATAZ_\QT_TRANSLATIONS_DIR\camera.qm QT_TRANSLATIONS_DIR\camera.qm
S60_APP_RESOURCE(cxui)