/*
* 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 <bldvariant.hrh>
#include <coecntrl.h>
#include <AknUtils.h>
#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<KMaxTextLength> 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<KMaxTextLength> iSequenceImageText;
// text array - used to store remaining record time as text
TBuf<KMaxTextLength> 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<KMaxTextLength> 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