diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraapp/generic/inc/CamSettingsModel.h --- /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 + +#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& VideoQualityArray(); + + /** + * Return handle to video resolution array + * @since 2.8 + * @param return reference to array of video resolutions + */ + virtual const RArray& 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 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& 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& 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* + 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& 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& 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& aSettingsList, + RArray& 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& 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& 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& aSrc, + RPointerArray& 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 iObservers; + + // Setting previews + RPointerArray iSettingPreviews; + + // List of setting item id/value pairs for static photo settings. + RPointerArray iDynamicPhotoIntSettings; + + //Backup of iDynamicPhotoIntSettings + RPointerArray iDynamicPhotoIntSettingsBackup; + + + // Parallel array to "iDynamicPhotoIntSettings" containing + // default values. + RArray iDynamicPhotoIntDefaults; + + // List of setting item id/value pairs for dynamic photo settings. + RPointerArray iDynamicVideoIntSettings; + + //Backup of iDynamicVideoIntSettings + RPointerArray iDynamicVideoIntSettingsBackup; + + // Parallel array to "iDynamicVideoIntSettings" containing + // default values. + RArray iDynamicVideoIntDefaults; + + // List of setting item id/value pairs for user scene settings. + RPointerArray iUserSceneSettings; + + //Backup of iUserSceneSettings + RPointerArray iUserSceneSettingsBackup; + + // Lists of scene data. + RPointerArray iPhotoScenes; + RPointerArray 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