/*
* 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