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