camerauis/cameraapp/generic/inc/CamPreCaptureContainerBase.h
branchRCL_3
changeset 24 bac7acad7cb3
--- /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 <CAMERAAPP_CAPI_V2_MIGRATION/>
+
+#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, // <CAMERAAPP_CAPI_V2_MIGRATION/>
+//                                    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 );
+
+  // <CAMERAAPP_CAPI_V2_MIGRATION>
+  // -------------------------------------------------------------------------
+  // 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 );
+
+
+  // </CAMERAAPP_CAPI_V2_MIGRATION>    
+  // -------------------------------------------------------------------------
+  // 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<CCamIndicator> 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<CFbsBitmap> 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<TAknLayoutRect> 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