diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraapp/generic/inc/CamNaviCounterModel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/inc/CamNaviCounterModel.h Wed Sep 01 12:30:54 2010 +0100 @@ -0,0 +1,595 @@ +/* +* 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: Control for displaying remaining images in navi pane. +* +* Copyright © 2007 Nokia. All rights reserved. +* This material, including documentation and any related computer +* programs, is protected by copyright controlled by Nokia. All +* rights are reserved. Copying, including reproducing, storing, +* adapting or translating, any or all of this material requires the +* prior written consent of Nokia. This material also contains +* confidential information which may not be disclosed to others +* without the prior written consent of Nokia. + +* +* +*/ + + +#ifndef CAMNAVICOUNTERMODEL_H +#define CAMNAVICOUNTERMODEL_H + +// INCLUDES +#include +#include +#include +#include "CamAppController.h" +#include "CamSettings.hrh" +#include "CamResourceLoader.h" +#include "CamObservable.h" +#include "CamObserverHandler.h" + +#include "CamSelfTimerObserver.h" + +#include "CamBurstModeObserver.h" + +#include "CamAppUiBase.h" + +// CONSTANTS +const TInt KMaxTextLength = 40; + +// FORWARD DECLARATIONS +class MAknsSkinInstance; +class CCamDecorator; +class CCamTextItem; +class CAknNavigationDecorator; +class CFbsBitmap; +// CLASS DECLARATION + + +/** +* Control for displaying recording time info in navi pane. +* @since 2.8 +*/ +class CCamNaviCounterModel : public CBase, + public MCamControllerObserver, + public MCamObservable, + public MCamResourceLoader, + public MCamSelfTimerObserver, + public MCamBurstModeObserver + + { + public: // Constructors and destructor + /** + * Static factory construction function + * @since 2.8 + * @param aController Reference to CCamAppController + * @return pointer to constructed instance of CCamNaviCounterModel + */ + static CCamNaviCounterModel* NewL( CCamAppController& aController ); + + /** + * Destructor. + */ + ~CCamNaviCounterModel(); + + private: // New functions + /** + * Update remaining image counter + * @since 2.8 + */ + void UpdateCounter(); + + /** + * Update remaining time till next timelapse capture + * @since 3.0 + */ + void UpdateTimeLapseCountdownL(); + + /** + * Update captured and remaining image count during burst and timelapse capture + * @since 3.0 + */ + void UpdateSequenceImageCount(); + + /** + * Update remaining record time + * @since 2.8 + */ + void UpdateRecordTimeAvailableL(); + + public: // From MCamResourceLoader + /** + * From MCamResourceLoader + * @since 3.0 + */ + void LoadResourceDataL(); + + /** + * From MCamResourceLoader + * @since 3.0 + */ + void UnloadResourceData(); + + /** + * From MCamResourceLoader + * @since 3.0 + */ + void ReloadResourceDataL(); + + public: // From MCamObservable + /** + * From MCamObservable + * @param aObserver Observer to register + * @since 3.0 + */ + void RegisterObserverL(MCamObserver* aObserver); + + /** + * From MCamObservable + * @param aObserver Observer to deregister + * @since 3.0 + */ + void DeregisterObserver(MCamObserver* aObserver); + + /** + * From MCamObservable + * @param aEvent Event code to broadcast + * @since 3.0 + */ + void BroadcastEvent(TCamObserverEvent aEvent); + + public: // New functions + /* + * Draws counter and storage icon in the navi pane. + */ + void CreateNaviBitmapsL( TBool aFlag = ETrue ); + + /** + * Set capture mode (defines which counter to use) + * @since 2.8 + * @param aCaptureMode Specifies the current capture mode in use + */ + void SetCaptureModeL( TCamCameraMode aCaptureMode, + TCamImageCaptureMode aImageMode ); + + /** + * Draw the storage icon + * @since 2.8 + * @param aGc The graphics context to use + */ + void DrawStorageIcon( CBitmapContext& aGc ) const; + + /** + * Draw the video file type icon + * @since 2.8 + * @param aGc The graphics context to use + */ + void DrawVideoFileTypeIndicator( CBitmapContext& aGc ) const; + + /** + * Force update of navi-pane (i.e after dismissal of MMC removed error note) + * @since 2.8 + */ + void ForceNaviPaneUpdate(); + + /** + * Sets a new extent to render into + * @param aExtent New extent + */ + void SetExtentL( TRect aExtent ); + + public: // Functions from base class MCamSelfTimerObserver + /** + * Handle an event from CCamSelfTimer. + * @since 2.8 + * @param aEvent the self timer event + * @param aCountDown self timer countdown duration + */ + void HandleSelfTimerEvent( TCamSelfTimerEvent aEvent, + TInt aCountDown ); + + public: // Functions from base class MCamBurstModeObserver + /** + * Handle sequence state change + * @since 2.8 + * @param aActive ETrue if sequence now active, else EFalse + */ + void BurstModeActiveL( TBool aActive, TBool aStillModeActive ); + + /** + * Draw the counter to the bitmap used in the navi pane + * @since 3.0 + * @param aBmpGc The graphics context for the bitmap + * @param aBmpMaskGc The graphics context for the bitmap mask + */ + void DrawCounterToBitmaps( CFbsBitGc& aBmpGc, CFbsBitGc& aBmpMaskGc ) const; + + /** + * Draw Navi-Counter + * @since 3.0 + * @param aGc Handle to graphics context + * @param aControl Pointer to the control + */ + void DrawNaviCtr( CBitmapContext& aGc, const CCoeControl* aControl ) const; + + protected: + /** + * C++ constructor. + * @since 2.8 + * @param aController Reference to CCamAppController + */ + CCamNaviCounterModel( CCamAppController& aController ); + + /** + * Symbian OS 2nd phase constructor. + * @since 2.8 + */ + void ConstructL(); + + private: // Functions from base classes + + /** + * Draw the navi-counter + * @since 3.0 + * @param aGc Handle to graphics context + * @param aControl Pointer to the control + */ + void DrawCounter( CBitmapContext& aGc, const CCoeControl* aControl ) const; + + /** + * Draw the storage icon to the bitmap used in the navi pane + * @since 3.0 + * @param aBmpGc The graphics context for the bitmap + * @param aBmpMaskGc The graphics context for the bitmap mask + */ + void DrawStorageIconToBitmap( CFbsBitGc& aBmpGc, CFbsBitGc& aBmpMaskGc ) const; + + /** + * Draw the text + * @since 2.8 + * @param aSkin the current skin + * @param aText A Reference to the text + */ + void DrawText( MAknsSkinInstance* aSkin, + const TDesC& aText, + CBitmapContext& aGc ) const; + + /** + * Draw the countdown text (timelapse mode) + * @since 3.0 + * @param aSkin the current skin + * @param aGc the graphics context + */ + void DrawTimeLapseCountdown( MAknsSkinInstance* aSkin, + CBitmapContext& aGc ) const; + + /** + * Draw the captured and remaining image text (timelapse and burst mode) + * @since 3.0 + * @param aSkin the current skin + * @param aGc the graphics context + */ + void DrawSequenceImageText( MAknsSkinInstance* aSkin, + CBitmapContext& aGc ) const; + + /** + * Draw the count of captured images (timelapse mode - postcapture) + * @since 3.0 + * @param aSkin the current skin + * @param aGc the graphics context + */ + void DrawImagesCapturedTextL( MAknsSkinInstance* aSkin, + CBitmapContext& aGc ) const; + + /** + * Draw the current file size + * @since 3.0 + * @param aSkin the current skin + */ + void DrawCurrentFileSizeL( MAknsSkinInstance* aSkin, + CBitmapContext& aGc ) const; + + /** + * Construct the member variables for selftimer icon + * in the navi-pane + * @since 2.8 + * @param aResname The resource file name + */ + void ConstructNaviSelfTimerL( TPtrC& aResname ); + + /** + * Draw the selftimer icon and text + * @since 2.8 + * @param aGc The graphics context to use + * @param aSkin The current skin + */ + void DrawNaviSelfTimer( CBitmapContext& aGc, + MAknsSkinInstance* aSkin ) const; + + /** + * Construct the member variables for sequence icon + * in the navi-pane + * @since 2.8 + * @param aResname The resource file name + */ + void ConstructNaviSequenceL( TPtrC& aResname ); + + /** + * Draw the sequence icon + * @since 2.8 + * @param aGc The graphics context to use + */ + void DrawNaviSequence( CBitmapContext& aGc ) const; + +#ifdef PRODUCT_SUPPORTS_NAVIPANE_GENERIC_SETUP_INDICATOR + /** + * Construct the member variables for general setup icon + * in the navi-pane + * @since 2.8 + * @param aResname The resource file name + */ + void ConstructNaviGenericSetupL( TPtrC& aResname ); + + /** + * Draw the generic setup icon + * @since 2.8 + * @param aGc The graphics context to use + */ + void DrawNaviGenericSetup( CBitmapContext& aGc ) const; +#endif // PRODUCT_SUPPORTS_NAVIPANE_GENERIC_SETUP_INDICATOR + + /** + * Construct the member variables for audio mute icon + * in the navi-pane + * @since 2.8 + * @param aResname The resource file name + */ + void ConstructNaviAudioMuteL( TPtrC& aResname ); + + /** + * Draw the audio mute icon + * @since 2.8 + * @param aGc The graphics context to use + */ + void DrawNaviAudioMute( CBitmapContext& aGc ) const; + + +#ifdef PRODUCT_SUPPORTS_NAVIPANE_MODE_SUBTITLE + /** + * Construct the member variables for mode subtitle + * in the navi-pane + * @since 2.8 + * @param aResname The resource file name + */ + void ConstructNaviModeSubtitleL( TPtrC& aResname ); + + /** + * Draw the mode subtitle icon and text + * @since 2.8 + * @param aGc The graphics context to use + * @param aSkin The current skin + */ + void DrawNaviModeSubtitle( CBitmapContext& aGc, MAknsSkinInstance* aSkin ) const; +#endif // PRODUCT_SUPPORTS_NAVIPANE_MODE_SUBTITLE + + /** + * From MCamControllerObserver + * Handle an event from CCamAppController. + * @since 2.8 + * @param aEvent the type of event + * @param aError error code + */ + void HandleControllerEventL( TCamControllerEvent aEvent, + TInt aError ); + + /** + * Read nontouch layout for primary camera + */ + void NonTouchLayoutL(); + + /** + * Read nontouch layout for primary camera + */ + void NonTouchLayoutSecondaryL(); + + /** + * Read touch layout + */ + void TouchLayoutL(); + + protected: //data + TInt iOriginalValueForEachBurst; + TBool iCounterNeedUpdate; + CCamAppController& iController; // camera app controller + + // text array - used to store remaining images as text + TBuf iCounterText; + + // string used to store remaining time till next + // timelapse capture + HBufC* iCountDownText; + + // text array - used to store captured and remaining image + // count in timelapse and burst modes + TBuf iSequenceImageText; + + // text array - used to store remaining record time as text + TBuf iRemainingTimeText; + + // Layout information for drawing the counter text. + TAknLayoutText iPhotoTextLayout; + TAknLayoutText iVideoTextLayout; + + // own + CCamTextItem* iPhotoTextItem; + + // own + CCamTextItem* iVideoTextItem; + + // Text items for drawing timelapse and burst text. + // own + CCamTextItem* iSequenceImageTextItem; + + // own + CCamTextItem* iSequenceCapturedTextItem; + + // own + CCamTextItem* iTimeLapseCountdownTextItem; + +#ifdef PRODUCT_SUPPORTS_NAVIPANE_FILENAME + // Layout information for drawing the current filename text. + TAknLayoutText iPhotoNameLayout; + TAknLayoutText iVideoNameLayout; +#endif // PRODUCT_SUPPORTS_NAVIPANE_FILENAME + + // current capture mode info + TCamCameraMode iMode; + TCamImageCaptureMode iImageMode; + + // storage location bitmaps + CFbsBitmap* iPhoneIcon; + CFbsBitmap* iPhoneIconMask; + CFbsBitmap* iMMCIcon; + CFbsBitmap* iMMCIconMask; + CFbsBitmap* iMassStorageIcon; + CFbsBitmap* iMassStorageIconMask; + + CFbsBitmap* iMpeg4Icon; + CFbsBitmap* iMpeg4IconMask; + CFbsBitmap* i3GPIcon; + CFbsBitmap* i3GPIconMask; + + // current storage location (phone or card) + TCamMediaStorage iStorageLocation; + + // set to ETrue when engine has initialised video recorder + TBool iVideoInitialised; + + // Layout information for the video storage icon (in postcapture state). + TAknLayoutRect iVidPostStorageIconRect; + + // Layout information for the video storage icon (in precapture state). + TAknLayoutRect iVidPreStorageIconRect; + + // Layout information for the image storage icon. + TAknLayoutRect iImgStorageIconRect; + + // Layout information for the video file type icon. + TAknLayoutRect iVideoFileTypeIconRect; + + // Layout information for drawing the self timer icon. + TAknLayoutRect iSelfTimerIconRect; + + // Self timer bitmaps. + CFbsBitmap* iSelfTimerIcon; + CFbsBitmap* iSelfTimerMask; + + // Specifies whether the self timer should be drawn or not. + TBool iDrawSelfTimer; + + // Layout information for drawing the self timer text. + TAknLayoutText iSelfTimerTextLayout; + + // text array - used to store self timer countdown as text + TBuf iSelfTimerText; + +#ifdef PRODUCT_SUPPORTS_NAVIPANE_SEQUENCE + // Specifies whether the sequence should be drawn or not. + TBool iDrawSequence; +#endif // PRODUCT_SUPPORTS_NAVIPANE_SEQUENCE + + // Layout information for drawing the sequence icon. + TAknLayoutRect iSequenceIconRect; + + // Sequence bitmap and mask + CFbsBitmap* iSequenceIcon; + CFbsBitmap* iSequenceMask; + +#ifdef PRODUCT_SUPPORTS_NAVIPANE_GENERIC_SETUP_INDICATOR + // Layout information for drawing the generic setup icon. + TAknLayoutRect iGenericIconRect; + + // Generic setup bitmap and mask + CFbsBitmap* iGenericIcon; + CFbsBitmap* iGenericMask; +#endif // PRODUCT_SUPPORTS_NAVIPANE_GENERIC_SETUP_INDICATOR + + // Layout information for drawing the audio mute icon. + TAknLayoutRect iAudioMuteIconRect; + + // Audio mute bitmap and mask + CFbsBitmap* iAudioMuteIcon; + CFbsBitmap* iAudioMuteMask; + +#ifdef PRODUCT_SUPPORTS_NAVIPANE_MODE_SUBTITLE + // Layout information for the subtitles text + TAknLayoutText iSubtitlePhotoTextLayout; + TAknLayoutText iSubtitleVideoTextLayout; + + // Text strings for photo/video subtitles + HBufC16* iSubtitlePhotoText; + HBufC16* iSubtitleVideoText; + + // Layout information for the subtitle icons (video and photo mode) + TAknLayoutRect iSubtitlePhotoRect; + TAknLayoutRect iSubtitleVideoRect; + + // Photo and video mode bitmaps and masks + CFbsBitmap* iSubtitlePhotoIcon; + CFbsBitmap* iSubtitlePhotoMask; + CFbsBitmap* iSubtitleVideoIcon; + CFbsBitmap* iSubtitleVideoMask; +#endif // PRODUCT_SUPPORTS_NAVIPANE_MODE_SUBTITLE + + // Layout information for Photo size text + TAknLayoutText iPhotoSizeLayout; + + // Layout information for Video size text + TAknLayoutText iVideoSizeLayout; + + // Resource string used to format the time text + HBufC* iTimeFormat; + + // set to ETrue if burst (sequence) mode enabled + TBool iBurstActive; + + // Current orientation + TCamOrientation iCamOrientation; + + // Decorators for various layouts + CCamDecorator* iPhotoPrecapDecorator; + CCamDecorator* iVideoPrecapDecorator; + CCamDecorator* iSequenceInCaptureDecorator; + CCamDecorator* iPhotoPostcapDecorator; + CCamDecorator* iVideoPostcapDecorator; + CCamDecorator* iTimeLapsePostCaptureDecorator; + + // Where the counter should be drawn + TRect iExtent; + + // To help handle the observers + CCamObserverHandler* iObserverHandler; + + TBool iLocationIconVisible; + + // Used to display items in the navi pane + CAknNavigationDecorator* iNaviDec; + CFbsBitmap* iNaviBitmap; + CFbsBitmap* iNaviBitmapMask; + }; + +#endif // CAMNAVICOUNTERMODEL_H + +// End of File