--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/inc/CamSettingsModel.h Wed Sep 01 12:30:54 2010 +0100
@@ -0,0 +1,770 @@
+/*
+* Copyright (c) 2007 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: Manages all settings data.
+*
+*/
+
+
+
+#ifndef CAMSETTINGSMODEL_H
+#define CAMSETTINGSMODEL_H
+
+// INCLUDES
+
+
+#include <eikenv.h>
+
+#include "Cam.hrh"
+#include "mcamsettingsmodel.h"
+#include "CamBurstModeObserver.h"
+#include "mcamsettingpreviewhandler.h"
+
+#include "camconfigurationconstants.h"
+
+// CONSTANTS
+
+// FORWARD DECLARATIONS
+class MCamSettingsModelObserver;
+class CCamVideoQualityLevel;
+class CCamStaticSettingsModel;
+class MCamStaticSettings;
+class CCamConfiguration;
+class CCameraUiConfigManager;
+
+// STRUCTS
+
+// CLASS DECLARATIONS
+
+/**
+* Manages all static settings data.
+* @since 2.8
+*/
+class CCamSettingsModel : public CBase,
+ public MCamSettingsModel,
+ public MCamSettingPreviewHandler,
+ /** to be removed*/public MCamBurstModeObserver
+ {
+ // =========================================================================
+ public: // Constructors and destructor
+
+ /**
+ * Symbian two-phased constructor.
+ * @param aConfiguration
+ * @since 2.8
+ * engine changes.
+ */
+ static CCamSettingsModel* NewLC( CCamConfiguration& aConfiguration );
+
+ /**
+ * Symbian two-phased constructor.
+ * @param aConfiguration
+ * @since 2.8
+ * engine changes.
+ */
+ static CCamSettingsModel* NewL( CCamConfiguration& aConfiguration );
+
+
+ /**
+ * Destructor.
+ */
+ ~CCamSettingsModel();
+
+ public:
+ /**
+ * Saves user defined FT setting
+ * @since S60 5.0
+ * @param None
+ * @return None
+ */
+ void StoreFaceTrackingValue();
+
+
+ /**
+ * Returns the face tracking state as it was before the latest scene mode change
+ */
+ TCamSettingsOnOff GetPreviousFaceTrack();
+
+ /**
+ * Sets the face tracking state as it was before the latest scene mode change
+ */
+ void SetPreviousFaceTrack( TCamSettingsOnOff aPreviousFaceTrack );
+
+ /**
+ * Returns the scene mode that was in use before the current scene mode was selected
+ */
+ TCamSceneId GetPreviousSceneMode();
+
+ /**
+ * Sets the scene mode that was in use before the current scene mode was selected
+ */
+ void SetPreviousSceneMode( TCamSceneId aPreviousSceneMode );
+
+
+ // -------------------------------------------------------------------------
+ // From base class MCamSettingsModel
+ public:
+
+ /**
+ * Add a settings model observer.
+ * Observers will be notified of settings changes.
+ */
+ virtual void AttachObserverL( const MCamSettingsModelObserver* aObserver );
+
+ /**
+ * Remove a settings model observer.
+ */
+ virtual void DetachObserver( const MCamSettingsModelObserver* aObserver );
+
+ /**
+ * Resets all user scene settings to their defaults.
+ * @since 2.8
+ */
+ virtual void ResetUserSceneL();
+
+ /**
+ * Returns the current integer value for the specified setting
+ * @return the current integer setting value
+ * @param aSettingItem specifies which setting item that want the value of.
+ * @since 2.8
+ */
+ virtual TInt IntegerSettingValue( TInt aSettingItem ) const;
+
+ /**
+ * Returns the setting value for a specific field of a scene
+ * @return the setting value
+ * @param aSceneId specifies which scene.
+ * @param aSceneId specifies which field of the scene.
+ * @since 2.8
+ */
+ virtual TInt SceneSettingValue( TInt aSceneId, TInt aSceneField ) const;
+
+ /**
+ * Sets a new value for the specified integer setting
+ * @param aSettingItem specifies which setting item that want to set the value of.
+ * @param aSettingValue the new integer value for the specified setting item.
+ * @since 2.8
+ */
+ virtual void SetIntegerSettingValueL( TInt aSettingItem, TInt aSettingValue );
+
+ /**
+ * Sets a new text value for the specified setting
+ * @param aSettingItem specifies which setting item that want to set the text value of.
+ * @param aSettingValue the new text value for the specified setting item.
+ * @since 2.8
+ */
+ virtual void SetTextSettingValueL( TInt aSettingItem,
+ const TDesC& aSettingValue );
+
+ /**
+ * Returns the current text value for the specified setting
+ * @return the current text setting value
+ * @param aSettingItem specifies which setting item that want the text value of.
+ * @since 2.8
+ */
+ virtual TPtrC TextSettingValue( TInt aSettingItem ) const;
+
+ /**
+ * Returns whether a particular setting value can be set or not.
+ * @return ETrue if can be set. Otherwise, EFalse.
+ * @param aSettingValue the value in question.
+ * @param aSettingItem the setting item in question.
+ * @since 2.8
+ */
+ virtual TBool SettingValueEnabled( TInt aSettingItem,
+ TInt aSettingValue ) const;
+
+ /**
+ * Get the default value for a setting item.
+ * @param aSettingId The id of the setting.
+ * @return The default value for setting item or KErrNotFound if not found.
+ */
+ virtual TInt DynamicSettingDefaultValue( TInt aSettingId ) const;
+
+ /**
+ * Sets all dynamic settings to their defaults.
+ * @since 2.8
+ */
+ virtual void SetDynamicSettingsToDefaults();
+
+ /**
+ * Sets a single dynamic setting to its default.
+ * @since 2.8
+ */
+ virtual void SetDynamicSettingToDefault(TInt aSettingItem);
+
+ /**
+ * Sets a single dynamic setting to scene default value.
+ * @param aSceneId Scene which the default value is taken from.
+ * @param aSceneField Id of the setting in scene data.
+ * @param aSettingId Id of the setting in dynamic settings.
+ * @param aVideoScene Is the scene a video scene.
+ * @return KErrNotFound, if setting could not be set.
+ */
+ virtual TInt SetDynamicSettingToSceneDefaultL( TInt aSceneId,
+ TInt aSceneField,
+ TInt aSettingId,
+ TBool aVideoScene );
+
+
+ /**
+ * Loads the static settings from shared data. Required to update
+ * the settings whenever get foreground event, in case of external
+ * changes to the settings.
+ * @since 2.8
+ * @param aIsEmbedded Specifies whether the application is embedded
+ * or not.
+ */
+ virtual void LoadStaticSettingsL( TBool aIsEmbedded );
+
+ /**
+ * Return handle to video quality level array
+ * @since 2.8
+ * @return reference to array of video quality levels
+ */
+ virtual const RPointerArray<CCamVideoQualityLevel>& VideoQualityArray();
+
+ /**
+ * Return handle to video resolution array
+ * @since 2.8
+ * @param return reference to array of video resolutions
+ */
+ virtual const RArray<TSize>& VideoResolutions();
+
+ /**
+ * Returns the image resolution for a given resolution index.
+ * @since 2.8
+ * @param aIndex The index to get the resolution for
+ * @returns The X and Y dimensions in pixels of the resolution.
+ */
+ virtual TSize ImageResolutionFromIndex( TCamPhotoSizeId aIndex );
+
+ /**
+ * Returns the current photo quality.
+ * @return the quality.
+ * @since 2.8
+ */
+ virtual TInt CurrentPhotoCompression() const;
+
+ /**
+ * Returns the current photo resolution from Settings
+ * @return the resolution.
+ * @since 2.8
+ */
+ virtual TCamPhotoSizeId CurrentPhotoResolution() const;
+
+ /**
+ * Returns the photo resolution for a particular quality
+ * @return the resolution.
+ * @param aQualityIndex The index of the quality
+ * @since 3.0
+ */
+ virtual TCamPhotoSizeId PhotoResolution( TInt aQualityIndex ) const;
+
+ /**
+ * Stores the primary camera settings when changing to secondary camera
+ * that they can be reapplied when changing back
+ * @since 2.8
+ */
+ virtual void StorePrimaryCameraSettingsL();
+
+ /**
+ * Restores the primary camera settings
+ * @since 2.8
+ */
+ virtual void RestorePrimaryCameraSettingsL();
+
+ /**
+ * Return variant info.
+ */
+ virtual const TCamVariantInfo& VariantInfo();
+
+ /*
+ * Reset repository file
+ * @since3.0
+ */
+ virtual void ResetRepository();
+
+ // -------------------------------------------------------------------------
+ // From base class MCamSettingPreviewHandler
+ public:
+
+ /**
+ * Activates preview for one setting.
+ * Returns the preview value as setting value in ProvideCameraSettingL
+ * until Commit or Cancel is called.
+ * @param aSettingId The setting for which preview is set
+ * @param aSettingValue The setting value used for preview
+ * @leave Any system error code.
+ */
+ virtual void ActivatePreviewL( const TCamSettingItemIds& aSettingId,
+ TInt aSettingValue );
+
+ /**
+ * Cancels the preview for one setting.
+ * After this call ProvideCameraSettingL returns the actual setting value.
+ * If the setting does not have active preview, such error is ignored.
+ * @param aSettingId Id of the setting for which the preview is cancelled.
+ */
+ virtual void CancelPreview( const TCamSettingItemIds& aSettingId );
+
+
+ /**
+ * Cancels the preview for a set of settings.
+ * If some of the settings do not have active preview, such error is ignored.
+ */
+ virtual void CancelPreviews( const RArray<TCamSettingItemIds> aSettingIds );
+
+ /**
+ * Cancels all previews.
+ * No error reported, if no previews active.
+ */
+ virtual void CancelAllPreviews();
+
+ /**
+ * Commits the preview value for the given set of settings.
+ * After this call completes, the preview is no more active for the setting.
+ * If the call completes successfully, the preview is stored as the
+ * actual setting value. If leave occurs, the preview is not stored.
+ * @param aSettingId Id of the setting for which the preview is committed.
+ * @leave KErrArgument There was no preview value for the given setting.
+ * @leave Any system error code.
+ */
+ virtual void CommitPreviewL( const TCamSettingItemIds& aSettingId );
+
+ /**
+ * Commits the preview for a set of settings.
+ * If some of the settings do not have active preview, such error is ignored.
+ */
+ virtual void CommitPreviewsL( const RArray<TCamSettingItemIds>& aSettingIds );
+
+ /**
+ * Commit previews for all settings with active preview.
+ * @leave Any system error code.
+ */
+ virtual void CommitAllPreviewsL();
+
+ /**
+ * Get the set of settings with active preview.
+ * Preview is active if it has been set with ActivatePreviewL
+ * but not cancelled or committed after that.
+ * @param aSettingIds Return the ids of the active settings in this array.
+ */
+ virtual void ActivePreviewsL( RArray<TCamSettingItemIds>& aSettingIds ) const;
+
+
+ // -------------------------------------------------------------------------
+ // New methods
+ public:
+
+ /*
+ * Sets user scene setting to default
+ */
+ void SetUserSceneDefault();
+
+ /*
+ * Gets the handle to the settings model, which is used inturn by the
+ * plugin to call the interfaces for performing needed actions.
+ */
+ MCamStaticSettings& StaticSettingsModel() const;
+
+ /**
+ * Loads the static settings from shared data, or if unable to from the resource file.
+ * @since 2.8
+ */
+ void LoadSettingsL();
+
+ /**
+ * Saves the static settings to shared data.
+ * @since 2.8
+ */
+ void SaveSettingsL() ;
+
+ /*
+ * Is Scene supported
+ */
+ TBool IsImageSceneSupported( const TInt aSceneId ) const;
+
+ /*
+ * Is Scene supported
+ */
+ TBool IsVideoSceneSupported( const TInt aSceneId ) const;
+
+ /*
+ * Returns UiConfigManager Ptr from StaticSettingsModel
+ */
+ CCameraUiConfigManager* UiConfigManagerPtr();
+ private:
+
+ /**
+ * Saves one static setting to Central Repository.
+ * @param aSettingId Id of the setting to be saved.
+ * @since Camera 4.0
+ */
+ void SaveStaticSettingL( TCamSettingItemIds aSettingId );
+
+ /**
+ * Get the associated settings list for given setting item.
+ * @param aSettingId Id of the setting for which the list is requested.
+ * @since Camera 4.0
+ */
+ RPointerArray<TIntSetting>*
+ MapSettingItem2SettingsList( TCamSettingItemIds aSettingId );
+
+ // -------------------------------------------------------------------------
+ // Constructors
+ private:
+
+ /**
+ * C++ constructor.
+ * @since 2.8
+ */
+ CCamSettingsModel( CCamConfiguration& aConfiguration );
+
+ /**
+ * C++ 2nd phase constructor.
+ * @since 2.8
+ */
+ void ConstructL();
+
+ // -------------------------------------------------------------------------
+ // new functions
+ private:
+
+ // Notify setting model observers, that a setting item value has changed.
+ void NotifyObservers( TCamSettingItemIds aSettingId,
+ TInt aSettingValue );
+
+ void NotifyObservers( TCamSettingItemIds aSettingId,
+ const TDesC& aSettingValue );
+
+ /**
+ * Read variant flags from Central Repository.
+ */
+ void ReadVariantFlagsL();
+
+ /**
+ * Resets all user scene settings to their defaults without
+ * activating them.
+ * @since 2.8
+ */
+ void ResetUserSceneWithoutActivatingChangesL();
+
+ /**
+ * Copies a user scene setting across to the capture setup settings.
+ * @since 2.8
+ * @param aSettingItem the user scene setting to copy.
+ */
+ void CopyUserSceneSettingToCaptureSettingL( TInt aSettingItem );
+
+ /**
+ * Activates the current user scene settings.
+ * @since 2.8
+ */
+ void ActivateUserSceneSettingsL();
+
+ /**
+ * Returns whether a particular setting is an engine setting, or not.
+ * @since 2.8
+ * @param aSettingItem The id of the setting item.
+ * @return ETrue if an engine setting. Otherwise EFalse.
+ */
+ TBool SettingIsForEngine( TInt aSettingItem );
+
+ /**
+ * Searches in a settings list for a particular setting item..
+ * @param aSettingsList the setting list to search in.
+ * @param aSettingItem the id of the setting item to look for.
+ * @return the index of the setting item if found. Otherwise returns KErrNotFound .
+ * @since 2.8
+ */
+ TInt SearchInSettingsListFor(
+ const RPointerArray<TIntSetting>& aSettingsList,
+ TInt aSettingItem ) const;
+
+
+ /**
+ * Finds a scene in a particular scene list.
+ * @param aSceneItemId the id of the scene to search for.
+ * @param aSceneList the scene list to search in.
+ * @return the index to the scene in the list.
+ * @since 2.8
+ */
+ TInt FindSceneInSceneList(
+ TInt aSceneItemId,
+ const RPointerArray<TSceneData>& aSceneList ) const;
+
+ /**
+ * Handles a change in the value for the user scene setting.
+ * @param aSettingValue The new scene value.
+ * @param aActivate Whether to activate the user scene changes
+ * @since 2.8
+ */
+ void UserSceneHasChangedL( TInt aSettingValue, TBool aActivate );
+
+ /**
+ * Handles a change in the value for the photo scene setting.
+ * That is, it updates the rest of the photo dynamic setings.
+ * @param the new scene value.
+ * @since 2.8
+ */
+ void PhotoSceneHasChangedL( TInt aSettingValue );
+ /**
+ * Handles a change in the value for the video scene setting.
+ * That is, it updates the rest of the video dynamic setings.
+ * @since 2.8
+ * @param aSettingValue The new scene value.
+ */
+ void VideoSceneHasChangedL( TInt aSettingValue );
+
+ /**
+ * Returns the default value of a setting for a video scene item.
+ * @param aSceneId the id of the scene item.
+ * @param aSetting the id of the setting item.
+ * @return the default value
+ * @since 2.8
+ */
+ TInt DefaultSettingValueForVideoScene( TInt aSceneId, TInt aSetting ) const;
+
+
+ /**
+ * Returns the maximum allowed quality for a photo scene.
+ * @param the scene id.
+ * @return the highest allowed quality.
+ * @since 2.8
+ */
+ TInt PhotoSceneMaximumQuality( TInt aSceneId ) const;
+
+ /**
+ * Returns the current photo quality value.
+ * @return the quality.
+ * @since 2.8
+ */
+ TInt CurrentPhotoQualityValue() const;
+
+ /**
+ * Returns the photo quality array index.
+ * @Param the photo quality id for the desired quality
+ * @return the array index for the specified quality.
+ * @since 2.8
+ */
+ TInt PhotoQualityArrayIndex(TInt aPhotoQualityId ) const;
+
+ /**
+ * Returns the default value of a setting for a particular scene item.
+ * @param aSceneId the id of the scene item.
+ * @param aSetting the id of the setting item.
+ * @return the default value
+ * @since 2.8
+ */
+ TInt DefaultSettingValueForScene( TInt aSceneId, TInt aSetting ) const;
+
+ /**
+ * Loads a list of dynamic settings from the resource file and
+ * their default values.
+ * @param aResourceId the id of the resource that contains the
+ * settings items id's and their default values.
+ * @param aSettingsList the list to populate with dynamic settings
+ * from the resource file.
+ * @param aDefaultsList the list to populate with default values
+ * for the dynamic settings from the resource file.
+ * @since 2.8
+ */
+ void LoadDynamicSettingsL( TInt aResourceId,
+ RPointerArray<TIntSetting>& aSettingsList,
+ RArray<TInt>& aDefaultsList );
+
+ /**
+ * Loads a list of dynamic settings from the resource file
+ * @param aResourceId the id of the resource that contains the
+ * settings items id's and their default values.
+ * @param aSettingsList the list to populate with dynamic settings
+ * from the resource file.
+ * @since 2.8
+ */
+ void LoadDynamicSettingsL( TInt aResourceId,
+ RPointerArray<TIntSetting>& aSettingsList );
+
+ /**
+ * Loads a list of scene settings from the resource file.
+ * @param aResourceId the id of the resource in the resource file.
+ * @param aSceneDataArray the array to populate with the resource.
+ * @since 2.8
+ */
+ void LoadScenesDataL( TInt aResourceId,
+ RPointerArray<TSceneData>& aSceneDataArray );
+
+ /**
+ * Loads a list of scene settings from product specific header file.
+ * @since 3.0
+ */
+ void LoadSceneDataL( TBool aPhotoSceneSettings = ETrue );
+
+
+ /**
+ * Removes any previously loaded settings.
+ * @since 2.8
+ */
+ void UnloadSettings();
+
+ /**
+ * Removes any previously loaded static settings.
+ * @since 2.8
+ */
+ void UnloadStaticSettings();
+
+ /**
+ * Loads component resources
+ */
+ void LoadResourcesL();
+
+ /**
+ * Frees component resources
+ */
+ void UnLoadResources();
+
+ /**
+ * Backup and Restore Settings array
+ * @param aSrc The source settings array
+ * @param aDest The destination settings array
+ * @param aRestore ETrue to restore
+ * @since 5.1
+ */
+ void CopySettingsL(RPointerArray<TIntSetting>& aSrc,
+ RPointerArray<TIntSetting>& aDest,
+ TBool aRestore = EFalse);
+
+ /**
+ * Store UserScene Settings
+ * @since 5.1
+ */
+ void StoreUserSceneSettingsL();
+
+ private: // Functions from base classes
+
+ /**
+ * From MCamBurstModeObserver
+ * @since 2.8
+ * @param aActive whether or not burst mode is active
+ * @param aStillModeActive whether or not still capture is active
+ */
+ void BurstModeActiveL( TBool aActive, TBool aStillModeActive );
+
+ // =========================================================================
+ private: // data
+ TCamSettingsOnOff iPreviousFaceTrack; // previous user defined FT setting
+ TCamSceneId iPreviousSceneMode; // previous camera scene mode
+
+
+ /**
+ * Stores information for front/back camera settings
+ * @since 2.8
+ */
+ class TCamCameraSettings
+ {
+ public:
+ TInt iPhotoQuality;
+ TInt iVideoQuality;
+ };
+
+ // Reference to observer of this settings model.
+ // MCamSettingsModelObserver& iObserver;
+ RPointerArray<MCamSettingsModelObserver> iObservers;
+
+ // Setting previews
+ RPointerArray<TIntSetting> iSettingPreviews;
+
+ // List of setting item id/value pairs for static photo settings.
+ RPointerArray<TIntSetting> iDynamicPhotoIntSettings;
+
+ //Backup of iDynamicPhotoIntSettings
+ RPointerArray<TIntSetting> iDynamicPhotoIntSettingsBackup;
+
+
+ // Parallel array to "iDynamicPhotoIntSettings" containing
+ // default values.
+ RArray<TInt> iDynamicPhotoIntDefaults;
+
+ // List of setting item id/value pairs for dynamic photo settings.
+ RPointerArray<TIntSetting> iDynamicVideoIntSettings;
+
+ //Backup of iDynamicVideoIntSettings
+ RPointerArray<TIntSetting> iDynamicVideoIntSettingsBackup;
+
+ // Parallel array to "iDynamicVideoIntSettings" containing
+ // default values.
+ RArray<TInt> iDynamicVideoIntDefaults;
+
+ // List of setting item id/value pairs for user scene settings.
+ RPointerArray<TIntSetting> iUserSceneSettings;
+
+ //Backup of iUserSceneSettings
+ RPointerArray<TIntSetting> iUserSceneSettingsBackup;
+
+ // Lists of scene data.
+ RPointerArray<TSceneData> iPhotoScenes;
+ RPointerArray<TSceneData> iVideoScenes;
+
+ // Specifies whether the engine should be updated with settings such as
+ // White Balance after being prepared. This is device dependent and so
+ // will be read from the resource file.
+ TBool iUpdateAfterPrepare;
+
+ // Specifies whether this application is embedded or not.
+ TBool iEmbedded;
+
+ // Specifies whether burst mode is enabled or not
+ TBool iBurstEnabled;
+
+ // Reference to the CEikonEnv object, since it is used a lot.
+ CEikonEnv* iEnv;
+
+ // array of video quality level items read in from resource file
+ RPointerArray < CCamVideoQualityLevel > iQualityLevels;
+
+ // array of video resolutions read from resource
+ RArray< TSize > iVideoResolutions;
+
+ // array of photo quality levels read from resource
+ RArray< TCamPhotoQualitySetting > iPhotoQualityLevels;
+
+ // array of photo resolutions read from resource
+ RArray< TSize > iPhotoResolutions;
+
+ // Specifies whether the engine is ready for receiving
+ // a video prepare event.
+ TBool iEngineReadyForVideoPrepare;
+
+ // Specifies whether the settings model is waiting to
+ // prepare the engine with video.
+ TBool iWaitingToPrepareVideo;
+
+ // The cached primary camera settings
+ TCamCameraSettings iPrimaryCameraSettings;
+ // The cached secondary camera settings
+ TCamCameraSettings iSecondaryCameraSettings;
+
+ // Variant info
+ TCamVariantInfo iVariantInfo;
+ TInt iResourceFileOffset;
+
+ // Number of image scene settings
+
+ CCamConfiguration& iConfiguration;
+ CCamStaticSettingsModel* iStaticModel;
+ CCameraUiConfigManager* iUiConfigManager; // we dont own
+ };
+
+#endif // CAMSETTINGSMODEL_H
+
+// End of File