diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraapp/generic/inc/CamPreCaptureContainerBase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/inc/CamPreCaptureContainerBase.h Wed Sep 01 12:30:54 2010 +0100 @@ -0,0 +1,770 @@ +/* +* Copyright (c) 2007-2008 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: Container base class pre capture views +* +*/ + + + +#ifndef CAMPRECAPTURECONTAINERBASE_H +#define CAMPRECAPTURECONTAINERBASE_H + +// =========================================================================== +// INCLUDES +#include "CamAppController.h" +#include "CamContainerBase.h" +#include "CamControllerObservers.h" +#include "CamBurstModeObserver.h" +#include "CamZoomPane.h" +#include "CamPSI.h" // Product Specific Information +#include "cambatterypanecontroller.h" +#include "mcamcameraobserver.h" // MCamCameraObserver + +#include "CamLocationIconController.h" + + +// =========================================================================== +// FORWARD DECLARATIONS +class CWindowGC; +class CAknView; + +class CCamViewBase; +class CCamSidePane; +class CCamZoomPane; +class CCamIndicator; +class CCamTimeLapseSlider; +class MCamVfGridDrawer; +class CCamStartupLogo; +class CCamCaptureButtonContainer; + + +// =========================================================================== +// CLASS DECLARATION + +/** +* Container for still image pre capture view +*/ +class CCamPreCaptureContainerBase : public CCamContainerBase, + public MCamControllerObserver, + public MCamCameraObserver, + public MCamSettingsModelObserver, // +// public MCamViewFinderObserver, + + public MCamBurstModeObserver, + public MCamBatteryPaneObserver, + public MCamLocationIconObserver + + { + // ========================================================================= + // Typenames + public: + + // enum TVfState moved to CCamContainerBase. Used in multiple child classes. + + enum TCamPreCaptureSubControls + { + // ECamTimeLapseControl + ECamActivePalette = 1, + ECamCaptureButton + }; + + enum TFocusState + { + EFocusStateNormal, + EFocusStateFocusing, + EFocusStateFocusFailed, + EFocusStateFocusAchieved + }; + + // ========================================================================= + // Public constructors and destructor + public: + + /** + * Destructor. + */ + virtual ~CCamPreCaptureContainerBase(); + + // ------------------------------------------------------------------------- + // From CoeControl + public: + + /** + * @since 2.8 + * @return number of contained controls + */ + virtual TInt CountComponentControls() const; + + /** + * @since 2.8 + * @param aIndex The index of the control required + * @return The requested control + */ + virtual CCoeControl* ComponentControl(TInt aIndex) const; + + /** + * Locally takes actions needed due to resource changes, then + * calls the implementation in CCamContainerBase + * @since 2.8 + * @param aType resource change + */ + virtual void HandleResourceChange( TInt aType ); + + + /** + * @since 2.8 + * @param aKeyEvent the key event + * @param aType the type of the event + * @return TKeyResponse key event was used by this control or not + */ + virtual TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ); + + + /** + * Handle events sending app to foreground or background + * @since 2.8 + * @param aForeground whether the event brings the app to fore or background + */ + virtual void HandleForegroundEventL( TBool aForeground ); + + /** + * Handle application level event. + * For example focus gained and lost are notified through this method. + * @param aEvent Event type + */ + virtual void HandleAppEvent( const TCamAppEvent& aEvent ); + + /** + * @since 2.8 + * @param aVisible ETrue if the controls should be visible + */ + virtual void MakeVisible( TBool aVisible ); + + /** + * From CCoeControl + * Handle pointer events. + * @since S60 5.0 + * @param aPointerEvent information about the pointerevent + */ + void HandlePointerEventL(const TPointerEvent& aPointerEvent); + + protected: + + /** + * @since 2.8 + * @param aRect area where to draw + */ + virtual void Draw( const TRect& aRect ) const; + + /** + * From CCoeControl. + * @since 5.2 + * @param aDrawNow Flag to indicate if the container should be drawn + */ + virtual void FocusChanged( TDrawNow aDrawNow ); + + // ------------------------------------------------------------------------- + // From MCamControllerObserver + public: + + /** + * @since 2.8 + * @param aEvent The specific event which occurred + * @param aError The error code associated with the event + */ + virtual void HandleControllerEventL( TCamControllerEvent aEvent, + TInt aError ); + + // + // ------------------------------------------------------------------------- + // From MCamCameraObserver + public: + + /** + * @since Camera 4.0 + * @see MCamCameraObserver + */ + virtual void HandleCameraEventL( TInt aStatus, + TCamCameraEventId aEventId, + TAny* aEventData = NULL ); + + // ------------------------------------------------------------------------- + // From MCamSettingsModelObserver + public: + + /** + * Notification for change in integer setting item value. + * + */ + virtual void IntSettingChangedL( TCamSettingItemIds aSettingItem, + TInt aSettingValue ); + + /** + * Notification for change in text setting item value. + * + */ + virtual void TextSettingChangedL( TCamSettingItemIds aSettingItem, + const TDesC& aSettingValue ); + + + // + // ------------------------------------------------------------------------- + // From MCamBatteryPaneObserver + public: + /** + * Called when battery pane has changed and redraw is needed + * @since 3.1 + */ + void BatteryPaneUpdated(); + + + // ------------------------------------------------------------------------- + // From MCamLocationIconObserver + public: + /** + * Called when location icon status is changed + * @since 3.1 + */ + void LocationIconUpdated(); + + // ------------------------------------------------------------------------- + public: + + /** + * Requests that the camera application redraws the supplied area + * @since 3.0 + * @param aArea the area to redraw + */ + virtual void Redraw(const TRect& aArea); + + public: // New functions + + /** + * Handles CBA and Options menu keys + * @since 3.0 + * @param aCommand The command to handle + */ + void HandleCommand( TInt aCommand ); + + /** + * Will show the zoom pane for a set time + * @since 2.8 + */ + void ShowZoomPaneWithTimer(); + + /** + * Constructs Active Palette if not done yet. + * If Active Palette already exists, clears any existing items. + * Sets new items based on resource from GetAPResourceId. + * Registers the view for Active Palette. + */ + virtual void SetupActivePaletteL( CCamViewBase* aView ); + + /** + * Tells the container to blink the resolution indicator + * when the resolution changes. The flag is reset after + * doing one blinking rountine or can be reset manually by + * calling the function with EFalse. + */ + void BlinkResolutionIndicatorOnChange( TBool aBlink=ETrue ); + + /** + * Updates the visibility of the capture button + * @since 5.2 + */ + void UpdateCaptureButton(); + + /** + * Perform the UI adjustments just before start of capture + * @since 5.2 + */ + void PrepareForCapture(); + + protected: + + /** + * Callback for zoom timer when zoom pane needs to be hidden. + * @since 2.8 + * @param aObject - Pointer to instance of CCamPreCaptureContainerBase + * @return KErrNone + */ + static TInt ZoomTimerCallback( TAny* aObject ); + + /** + * Callback for reticule timer, + * @since 3.0 + * @param aObject - Pointer to instance of CCamPreCaptureContainerBase + * @return KErrNone + */ + static TInt ReticuleTimerCallback( TAny* aObject ); + + /** + * Member function called when zoom timer expires. + * @since 2.8 + */ + void ZoomTimerTick(); + + /** + * Allows derived classes to draw mode-specific icons + * @param aGc The context to draw with + * @since 3.0 + */ + virtual void DrawAdditionalIcons(CBitmapContext& aGc) const = 0; + + /** + * Returns the rect of the resolution indicator + * @return The rect of the resolution icon as a TRect + * @since 3.0 + */ + TRect ResolutionIndicatorRect() const; + + /** + * Returns the ID of the array containing the resolution indicator icons + * @return The array ID + * @since 3.0 + */ + virtual TCamPsiKey ResolutionIndicatorIconPsiKey() const = 0; + + protected: + + /** + * Draw viewfinder grid. + * Delegates call to iVfGridDrawer. + * Does not draw anything if grid has not been set visible. + * @param aGc The graphics context + */ + virtual void DrawVfGrid( CBitmapContext& aGc ) const; + + /** + * Redraw part of viewfinder grid. + * Delegates call to iVfGridDrawer. + * Does not draw anything if grid has not been set visible. + * @param aRect The area to redraw + * @param aGc The graphics context + */ + virtual void ReDrawVfGrid( const TRect& aRect, + CBitmapContext& aGc ) const; + + /** + * Init the viewfinder grid. + * Creates the grid drawer if not done yet. + * Set drawing rectangle and visibility. + */ + virtual void InitVfGridL( const TRect& aRect ) = 0; + + /** + * Get the current setting for viewfinder grid visibility. + */ + virtual TBool GetVFGridVisibilitySetting() const; + + /** + * Reset the viewfinder grid drawer visibility property with + * value asked from controller. + */ + virtual void ResetVFGridVisibility(); + + protected: + + /** + * Symbian OS 2nd phase constructor. + * @since 2.8 + * @param aRect Frame rectangle for container. + */ + void BaseConstructL( const TRect& aRect ); + + /** + * C++ constructor + * @since 2.8 + * @param aController reference to CCamAppController instance + * @param aView reference to the view containing this container + */ + CCamPreCaptureContainerBase( CCamAppController& aController, + CAknView& aView ); + + private: // New Functions + + /** + * Performs the actual BitBlt of the viewfinder frame + * @since 2.8 + * @param aGc the graphics context + * @param aFrame pointer to the bitmap. + */ + void DrawFrameNow( CBitmapContext& aGc, const CFbsBitmap* aFrame ) const; + + protected: + /** + * Autofocus indication layout from LAF + * + * @since S60 S60 v5.0 + */ + void SizeChanged(); + + private: + /** + * Draws the reticule over the viewfinder + * @since 3.0 + * @param aGc the graphics context + */ + void DrawReticule( CBitmapContext& aGc ) const; + + /** + * Draw part of the reticule. + * Used to redraw areas left dirty by hiding AP tooltips. + * @param aRect The area to redraw + * @param aGc The graphics context + */ + void ReDrawReticule( const TRect& aRect, + CBitmapContext& aGc ) const; + + /** + * Force the side-pane or zoom-pane to redraw. Called when they + * are required to be overlaid on the viewfinder. + * @since 2.8 + */ + void ForceSideZoomPaneDraw() const; + + /** + * Return the id of the layout resource for the viewfinder frame + * @since 2.8 + * @param aViewFinderLayoutId on return this contains the resource id + * of the viewfinder layout + * @param aReticuleLayoutId on return this contains the resource id + * of the reticule layout if used, otherwise 0 + */ + virtual void ViewFinderLayoutResourceIds( TInt& aViewFinderLayoutId, + TInt& aReticuleLayoutId ) const = 0; + + /** + * Create the resolution indicator + * @since 2.8 + */ + void CreateResolutionIndicatorL(); + + /** + * Sets the resolution indicator to the required icon + * @since 2.8 + */ + virtual void SetResolutionIndicator() = 0; + + /** + * Sets the location indicator icon if the setting is enabled + */ + virtual void SetLocationIndicatorVisibility() = 0; + + /** + * Burst mode activation has changed + * @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 ); + + /** + * Process a key event that should change the current capture state + * E.g. start/pause recording, start/stop capture + * @since 3.0 + * @param aKeyEvent the key press that initiates the capture + * @return whether or not the key was consumed + */ + virtual TKeyResponse HandleCaptureKeyEventL( const TKeyEvent& aKeyEvent ) = 0; + + /** + * Process a key event that could change the current capture state + * E.g. start autofocus, revert from post-capture to pre-capture views + * @since 3.0 + * @param aKeyEvent the key press that initiates the capture + * @param aType the event code type + * @return whether or not the key was consumed + */ + virtual TKeyResponse HandleShutterKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ) = 0; + + /** + * Move up through the flash settings + * @since 3.0 + */ + virtual void IncreaseFlashSettingL(); + + /** + * Move down through the flash settings + * @since 3.0 + */ + virtual void DecreaseFlashSettingL(); + + /** + * Initiate behaviour in response to a navi key left/right arrow + * press + * @since 3.0 + * @param aKeyEvent the key that has been pressed + * @param aType the Key type + * @return whether or not the key was consumed + */ + TKeyResponse HandleLeftRightNaviKeyL( const TKeyEvent& aKeyEvent, + TEventCode aType ); + /** + * Draw side or zoom pane, softkeys and reticule + * @since 3.0 + * @param aGc context to draw into + */ + void DrawScreenFurniture( CBitmapContext& aGc ) const; + + /** + * Draw navi pane items + * @since 3.0 + * @param aGc context to draw into + */ + void DrawNaviControls( CBitmapContext& aGc ) const; + + /** + * Draw active palette + * @since 3.1 + */ + void DrawActivePalette() const; + + /** + * Draw active pallette + * @since 3.1 + * @param aGc context to draw into + */ + void DrawActivePalette( CBitmapContext& aGc ) const; + + /** + * Sets the iTimeLapseVisible flag + * @param aActive What to set iTimeLapseVisible to + */ + void SetTimeLapseVisible(TBool aActive); + + void HandleOperationStateChangeEventL(); + + /** + * Gets the resource id of AP items. + * Needs to be implemented in inheriting classes. + */ + virtual TInt GetAPResourceId() const = 0; + + /** + * Draws Screen content to graphics context + * @param aGc The context to draw with + * @param aFrame View Finder Frame to be drawn + */ + void DrawToContext(CBitmapContext& aGc, const CFbsBitmap* aFrame); + + /** + * Creates a colored Autofocus indication icon + * + * @since S60 S60 v5.0 + * @param aColor indication color + * @return TInt Created icon's offset in icons array + */ + TInt CreateAfIconL( TRgb aColor ); + + /** + * Creates a colored autofocus indication icon corner + * + * @since S60 S60 v5.0 + * @param aColor indication color + * @param aFileBitmapId ID of the bitmap in the file + */ + void CreateAfCornerL( TRgb aColor, TInt aFileBitmapId ); + + /** + * Sets size of autofocus indication icon + * + * @since S60 S60 v5.0 + * @param aOffset Offset in colored corner icon array + */ + void SetAfIconSize( TInt aOffset ); + + /** + * Draws corners of autofocus indication icon + * + * @since S60 S60 v5.0 + * @param aGc Bitmap graphics context + * @param aOffset Offset in colored corner icon array + */ + void DrawAf( CBitmapContext& aGc, TInt aOffset ) const; + + /** + * Read nontouch layout + */ + void NonTouchLayout(); + + /** + * Read touch layout + */ + void TouchLayout(); + + /** + * Callback used by timer to blink resolution indicator + * @since 5.2 + * @param aSelf Pointer to self (container) + */ + static TInt IndicatorVisible( TAny *aSelf ); + + /** + * Draw resolution indicator (for blinking). + * @since 5.2 + */ + void DrawResolutionIndicator(); + + // ========================================================================= + // Data + protected: + + // Pointer to the instance of the side pane + CCamSidePane* iSidePane; + + // Pointer to the instance of the zoom pane + CCamZoomPane* iZoomPane; + + // Array of pointer to the resolution indicators + RPointerArray iResolutionIndicators; + + // The current indicator + TInt iCurrentIndicator; + + // The visibility of the location indicator + TBool iLocationIndicatorVisible; + CCamLocationIconController* iLocationIconController; + + // Is reticule to be displayed or not (for when flashing) + TBool iShowReticule; + + // Whether the current Photo Scene requires a reticule (some scenes do not focus) + TBool iPhotoSceneUsesReticule; + + TBool iNaviPaneActive; + + // If set, redraw calls are ignored. + TBool iDisableRedraws; + + // Viewfinder rect. + TRect iRect; + + // Timer used to remove zoom pane after a short delay + CPeriodic* iZoomTimer; + + // Keys to use for detecting zoom in and out key events + TInt iZoomInKey; + TInt iZoomOutKey; + + // whether we are left or right handed + TCamHandedness iHandedness; + + + // Reticule location and size + TRect iReticuleRect; + + // Icons and rect for capturing image + CCamCaptureButtonContainer* iCaptureButtonContainer; + + /** + * Autofocus indication icons array. + */ + RPointerArray iAfIcons; + + /** + * Autofocus indication: White ready icon. + */ + TInt iAfReadyIcon; + + /** + * Autofocus indication: Green focused icon. + */ + TInt iAfFocusIcon; + + /** + * Autofocus indication: Yellow error icon. + */ + TInt iAfErrIcon; + + /** + * Autofocus indication icons layout + */ + RArray iLayouts; + + /** + * Autofocus layout + */ + TSize iAfIconCornerSize; + + // Timer used for the flashing of the reticule + CPeriodic* iReticuleTimer; + + // Whether the reticule is visible or not during 'flash' on/off + TBool iReticuleFlashOn; + + // Current state of focus (reflected by reticule) + TFocusState iFocusState; + + // Determines if a stored image should be used in Draw() functions + TBool iFreezeFrame; + + // Determine from PSI if side & zoom pane are overlaid on VF + TBool iOverlayViewFinder; + + // width of the zoom pane + TInt iZoomPaneWidth; + + // The Time Lapse control + CCamTimeLapseSlider* iTimeLapseSlider; + + // Whether the Time Lapse control is visible + TBool iTimeLapseVisible; + + // Layout rect for the Timelapse control + TAknLayoutRect iTimeLapseLayout; + + // Determines if the zoom pane background needs redrawing + TBool iRedrawPaneBackground; + + // Determines if the viewfinder should use an off screen bitmap + TBool iUseOffScreenBitmap; + + // Offscreen drawing members + CFbsBitmap* iOffScreenBitmap; + CFbsBitGc* iBitmapGc; + CFbsBitmapDevice* iBitmapDevice; + + // True if this container has received any viewfinder frames + TBool iReceivedVfFrame; + + // True if application is shutting down + TBool iShuttingDown; + + TRect iVFRect; + + TRect iVfGridRect; + MCamVfGridDrawer* iVfGridDrawer; + + CCamBatteryPaneController* iBatteryPaneController; + + CFbsBitmap* iViewFinderBackup; + + // For blinking of resolution indicator + TBool iBlinkResolutionIndicator; + TBool iBlinkModeIndicator; + CPeriodic* iIndBlinkTimer; + TBool iDrawIndicator; + TInt iToggleCountdown; + + // Startup animation control + CCamStartupLogo* iStartupLogo; + // ========================================================================= + }; + +#endif // CAMPRECAPTURECONTAINERBASE_H + +// End of File