camerauis/cameraapp/generic/src/CamPostCaptureContainer.cpp
branchRCL_3
changeset 24 bac7acad7cb3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/src/CamPostCaptureContainer.cpp	Wed Sep 01 12:30:54 2010 +0100
@@ -0,0 +1,797 @@
+/*
+* Copyright (c) 2007-2009 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 class for still image and video post-capture views*
+*/
+
+
+
+// INCLUDE FILES
+#include <eikmenub.h>
+#include <aknview.h>
+#include <avkon.hrh>
+#include <gulutil.h>
+#include <AknUtils.h>
+#include <AknsFrameBackgroundControlContext.h>
+#include <AknsDrawUtils.h>
+#include <cameraapp.rsg>
+#include <vgacamsettings.rsg>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <layoutmetadata.cdl.h>
+#include <cameraapp.mbg>
+
+#include <touchfeedback.h> 
+
+#include "CamPanic.h"
+#include "CamAppUi.h"
+#include "CamPostCaptureContainer.h"
+#include "CamAppController.h"
+#include "CamLogger.h"
+#include "CamUtility.h"
+#include "CamNaviCounterControl.h"
+#include "CamNaviProgressBarControl.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "CamPostCaptureContainerTraces.h"
+#endif
+
+
+
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------------------------
+// CCamPostCaptureContainer::NewL
+// Symbian OS two-phased constructor
+// ---------------------------------------------------------------------------
+//
+CCamPostCaptureContainer* CCamPostCaptureContainer::NewL(
+        CCamAppController& aController,
+        CAknView& aView,
+        const TRect& aRect )
+    {
+    CCamPostCaptureContainer* self = new( ELeave ) CCamPostCaptureContainer(
+        aController, aView );
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect );
+    CleanupStack::Pop( self );
+    // return newly created CCamPostCaptureContainer instance
+    return self;
+    }
+
+// Destructor
+CCamPostCaptureContainer::~CCamPostCaptureContainer()
+  {
+  PRINT( _L("Camera => ~CCamPostCaptureContainer" ))
+
+  iController.RemoveControllerObserver( this );
+  delete iBatteryPaneController;
+  if(iPlayIcon)
+      {
+      delete iPlayIcon;
+      iPlayIcon = NULL;
+      }
+  if(iPlayIconMask)
+        {
+        delete iPlayIconMask;
+        iPlayIconMask = NULL;
+        }
+  if(iPlayIconBg)
+        {
+        delete iPlayIconBg;
+        iPlayIconBg = NULL;
+        }
+  if(iPlayIconBgMask)
+        {
+        delete iPlayIconBgMask;
+        iPlayIconBgMask = NULL;
+        }
+  if(iPlayIconBgPressed)
+        {
+        delete iPlayIconBgPressed;
+        iPlayIconBgPressed = NULL;
+        }
+  if(iPlayIconBgPressedMask)
+        {
+        delete iPlayIconBgPressedMask;
+        iPlayIconBgPressedMask = NULL;
+        }
+  PRINT( _L("Camera <= ~CCamPostCaptureContainer" ))
+  }
+  
+// ---------------------------------------------------------
+// CCamPostCaptureContainer::ConstructL
+// Symbian OS 2nd phase constructor
+// ---------------------------------------------------------
+//
+void CCamPostCaptureContainer::ConstructL( const TRect& aRect )
+    {
+    CCamContainerBase::BaseConstructL( aRect );
+    iController.AddControllerObserverL( this );
+
+    AknLayoutUtils::LayoutMetricsSize( AknLayoutUtils::EScreen, iScreenSize );
+   CCamAppUi* appUi = static_cast<CCamAppUi*>(CEikonEnv::Static()->AppUi()); 
+    // Do not construct battery pane controller, if secondary camera is in use
+    if ( iController.ActiveCamera() != ECamActiveCameraSecondary || 
+         appUi->IsQwerty2ndCamera() ) 
+  	    {
+	    iBatteryPaneController = CCamBatteryPaneController::NewL( *this, ETrue);
+	    }
+
+    if( ECamControllerImage == iController.CurrentMode() )
+      {
+      // Still mode - processing text needed  
+      PrepareProcessingTextL( ETrue );
+      } 
+    if ( iView.Id().iUid == ECamViewIdVideoPostCapture )
+        {
+        _LIT(KResName, "z:\\resource\\apps\\cameraapp.mif");
+        TSize playIconSize( 140, 92);
+        AknIconUtils::CreateIconL(
+                 iPlayIcon,
+                 iPlayIconMask,
+                 KResName(),
+                 EMbmCameraappQgn_indi_media_fullscreen_play,
+                 EMbmCameraappQgn_indi_media_fullscreen_play_mask);
+        AknIconUtils::SetSize(iPlayIcon,playIconSize,EAspectRatioPreserved);
+        AknIconUtils::SetSize(iPlayIconMask,playIconSize,EAspectRatioPreserved);
+        
+        //!!Please don't remove this commented section
+        /*TSize playIconSize(40,40);
+        AknIconUtils::CreateIconL(
+                 iPlayIcon,
+                 iPlayIconMask,
+                 KResName(),
+                 EMbmCameraappQgn_indi_cam4_tb_play,
+                 EMbmCameraappQgn_indi_cam4_tb_play_mask);
+        AknIconUtils::SetSize(iPlayIcon,playIconSize,EAspectRatioPreserved);
+        AknIconUtils::SetSize(iPlayIconMask,playIconSize,EAspectRatioPreserved);
+        
+        TSize playIconBgSize(140,92);
+        AknIconUtils::CreateIconL(
+                 iPlayIconBg,
+                 iPlayIconBgMask,
+                 KResName(),
+                 EMbmCameraappQgn_bg_lcam_vid_postcap_play,
+                 EMbmCameraappQgn_bg_lcam_vid_postcap_play_mask);
+        AknIconUtils::SetSize(iPlayIconBg,playIconBgSize,EAspectRatioPreserved);
+        AknIconUtils::SetSize(iPlayIconBgMask,playIconBgSize,EAspectRatioPreserved);
+        AknIconUtils::CreateIconL(
+                 iPlayIconBgPressed,
+                 iPlayIconBgPressedMask,
+                 KResName(),
+                 EMbmCameraappQgn_bg_lcam_vid_postcap_play_pressed,
+                 EMbmCameraappQgn_bg_lcam_vid_postcap_play_pressed_mask);
+        AknIconUtils::SetSize(iPlayIconBgPressed,playIconBgSize,EAspectRatioPreserved);
+        AknIconUtils::SetSize(iPlayIconBgPressedMask,playIconBgSize,EAspectRatioPreserved);*/
+        }
+    
+    // Make sure fixed toolbar is on top of this window
+    DrawableWindow()->SetOrdinalPosition( KCamPostCaptureWindowOrdinalPos );
+    }
+    
+// ---------------------------------------------------------------------------
+// CCamPostCaptureContainer::CCamPostCaptureContainer
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CCamPostCaptureContainer::CCamPostCaptureContainer(
+        CCamAppController& aController,
+        CAknView& aView )
+: CCamContainerBase( aController, aView ),
+  iCheckForFileNameChange( EFalse )
+    {
+    }
+
+// ---------------------------------------------------------
+// CCamViewFinderContainer::CountComponentControls 
+// Returns the number of controls owned
+// ---------------------------------------------------------
+//
+TInt CCamPostCaptureContainer::CountComponentControls() const
+    {
+	TInt count = CCamContainerBase::CountComponentControls();
+    if( ( iPaneInUse == ECamPaneCounter ) || ( iPaneInUse == ECamPaneProgress ) )
+	    {
+	    count++;
+		}
+		
+    if ( !iController.IsTouchScreenSupported() )
+        {
+        if(iActivePalette && iActivePalette->CoeControl()->IsVisible())
+            {
+            count++; //Active Palette 
+            }
+        }
+    
+	  return count;
+    }
+    
+// -----------------------------------------------------------------------------
+// CCamPostCaptureContainer::ComponentControl
+// Return specified control owned by this control
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CCamPostCaptureContainer::ComponentControl( TInt aIndex ) const
+    {
+	CCoeControl* con = CCamContainerBase::ComponentControl( aIndex );
+	if( con )
+	    return con;
+   	switch( aIndex )
+    	{
+	    case ECamPostCaptureSubControlNaviPane:
+	    	{
+	    	switch( iPaneInUse )
+	    		{
+	    		case ECamPaneCounter:
+	    			{
+	    			con = iNaviCounterControl;
+	    			break;
+	    			}
+	    		case ECamPaneProgress:
+	    			{
+	    			con = iNaviCounterControl;
+	    			break;
+	    			}
+	    		case ECamPaneUndefined:
+	    			{
+	    			break;
+	    			}
+	    		}
+	    	break;
+	    	}
+	    case ECamPostCaptureActivePalette:
+	        {
+	        if(iActivePalette && iActivePalette->CoeControl()->IsVisible())	        
+	            {
+	            con = iActivePalette->CoeControl();
+	            }	            
+	        break;
+	        }
+      
+        default:
+            break;
+	    }	        
+    return con;	
+	
+    }
+
+// ---------------------------------------------------------
+// CCamPostCaptureContainer::Draw
+// Draw control
+// ---------------------------------------------------------
+//
+void CCamPostCaptureContainer::Draw( const TRect& /*aRect*/ ) const
+    {
+    CCamAppUi* appUi = static_cast<CCamAppUi*>(CEikonEnv::Static()->AppUi());
+
+    if ( appUi && appUi->Embedding() && !appUi->ReadyToDraw() &&  
+         iController.ActiveCamera() == ECamActiveCameraPrimary ) 
+        {
+        // Flickering can be reduced if view is not drawn due to 'wrong' 
+        // orientation change. False redraw events may come if device 
+        // orientation is changed - even if camera app is in the background.
+        // 
+        // Primary camera does not support other than landscape mode, thus we
+        // must always return to it when embedded application is closed.   
+        return;
+        }
+
+    if ( appUi && iCheckForFileNameChange )
+        {
+        // whenever we come back from Properties view
+        // we check if the file name has changed already
+        appUi->StartFileNameCheck();
+        }
+    // Draw the current image - snapshot or thumbnail
+    CWindowGc& gc = SystemGc();
+    const CFbsBitmap* snapshot = iController.SnapshotImage();
+    TRect containerRect = Rect();
+
+    TBool lateOperation = ( ECamCapturing == iController.CurrentOperation() 
+                            || ECamCompleting == iController.CurrentOperation() );
+
+    if ( iView.Id().iUid != ECamViewIdVideoPostCapture &&
+       ( iController.ActiveCamera() != ECamActiveCameraSecondary ||
+         lateOperation ) )
+         {
+         gc.SetFaded( EFalse );
+         gc.SetPenStyle( CGraphicsContext::ENullPen );
+         gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+         gc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha );
+         gc.SetBrushColor( TRgb::Color16MA( 0 ) );
+         gc.Clear( iProcessingTextLayout.TextRect() );
+         gc.SetBrushStyle( CGraphicsContext::ENullBrush );
+         }
+                       
+    // If snapshot contains a bitmap
+    if ( snapshot )
+        {
+        OstTrace0( CAMERAAPP_PERFORMANCE, CCAMPOSTCAPTURECONTAINER_DRAW, "e_CAM_APP_SNAPSHOT_DRAW 1" ); //CCORAPP_SNAPSHOT_DRAW_START
+        
+        TSize snapshotSize = snapshot->SizeInPixels();
+        TRect bmCropRect( snapshotSize );
+        
+        // Get the required snapshot layout rect
+        TRect vfRect( ViewFinderFrameRect() ); 
+
+
+        // Standard CIF size snapshot, this could be either a video or
+        // still image snapshot. Get the size to display and
+        // crop the bitmap if necessary.
+        
+        if ( iView.Id().iUid == ECamViewIdVideoPostCapture )
+            {
+            // This is a video snapshot - work out if it needs cropping
+
+            TInt res = iController.GetCurrentVideoResolution();
+
+            if ( res != ECamVideoResolutionNHD )
+                {
+                // Work out the rectangle of the viewfinder bitmap to draw
+                TInt borderX = ( snapshotSize.iWidth - vfRect.Width() ) / 2;
+                TInt borderY = ( snapshotSize.iHeight - vfRect.Height() ) / 2;
+            	bmCropRect.SetRect( borderX, 
+                	                borderY, 
+                    	            snapshotSize.iWidth - borderX, 
+                        	        snapshotSize.iHeight - borderY );
+                }
+            }
+
+        gc.BitBlt( vfRect.iTl, snapshot, bmCropRect );
+        
+        OstTrace0( CAMERAAPP_PERFORMANCE, DUP1_CCAMPOSTCAPTURECONTAINER_DRAW, "e_CAM_APP_SNAPSHOT_DRAW 0" );    //CCORAPP_SNAPSHOT_DRAW_END
+        }
+
+    if( iProcessingText &&  //iProcessingBg && 
+        iController.ActiveCamera() != ECamActiveCameraSecondary && 
+        lateOperation )  
+        {
+        PRINT( _L("Camera <> CCamPostCaptureContainer: draw processing text..") );
+        // When iProcessingText exists (and we are in correct state), the processing
+        // image text needs to be drawn.
+        //iProcessingBg->Draw( gc, Rect() );
+    
+        gc.SetBrushColor( KRgbWhite );
+        gc.SetBrushStyle( CGraphicsContext::ENullBrush );
+        iProcessingTextLayout.DrawText( gc, *iProcessingText, ETrue, KRgbBlack ); 
+        }
+
+	if( iBatteryPaneController )
+		{
+		if( iPaneInUse == ECamPaneCounter )
+	        {
+	    	iNaviCounterControl->DrawNaviCtr( gc );
+	    	}
+	    // Draw the battery pane
+ 	 	iBatteryPaneController->Draw( gc );
+		}
+	
+	 if ( iController.ActiveCamera() == ECamActiveCameraSecondary )
+	     {
+	     if( iPaneInUse == ECamPaneCounter )
+	        {
+	        iNaviCounterControl->DrawNaviCtr( gc );
+	        }
+	     }
+	 
+	 if ( iView.Id().iUid == ECamViewIdVideoPostCapture )
+	     {
+         TSize playIconSize(140,92);
+	     TRect playIconRect(containerRect.Center() - TPoint(70,46),playIconSize);
+	     TRect playIconSourceRect(0,0,140,92);
+         
+	     //!!Please don't remove this commented section
+	     /*TSize playIconSize(40,40);
+         TRect playIconRect(containerRect.Center() - TPoint(20,20),playIconSize);
+         TRect playIconSourceRect(0,0,40,40);
+         
+         TSize playIconBgSize(140,92);
+	     TRect playIconBgRect(containerRect.Center() - TPoint(70,46),playIconBgSize);
+	     TRect playIconBgSourceRect(0,0,140,92);
+         
+	     if(iPlayIconPressed)
+	         {
+             gc.BitBltMasked(playIconBgRect.iTl,iPlayIconBgPressed,playIconBgSourceRect,iPlayIconBgPressedMask,EFalse);
+	         }
+	     else
+	         {
+             gc.BitBltMasked(playIconBgRect.iTl,iPlayIconBg,playIconBgSourceRect,iPlayIconBgMask,EFalse);
+	         }*/
+	     
+	     gc.BitBltMasked(playIconRect.iTl,iPlayIcon,playIconSourceRect,iPlayIconMask,EFalse);
+                 
+         }
+     }
+
+// ----------------------------------------------------
+// CCamPostCaptureContainer::CheckForFileName
+// 
+// ----------------------------------------------------
+//
+void CCamPostCaptureContainer::CheckForFileName( TBool aDoCheck )
+    {
+    iCheckForFileNameChange = aDoCheck;
+    }
+
+// ----------------------------------------------------
+// CCamPostCaptureContainer::OfferKeyEventL
+// Handles this application view's command keys. Forwards other
+// keys to child control(s).
+// ----------------------------------------------------
+//
+TKeyResponse CCamPostCaptureContainer::OfferKeyEventL( 
+    const TKeyEvent& aKeyEvent,
+    TEventCode aType )
+    {
+    CCamAppUi* appUi = static_cast<CCamAppUi*>(CEikonEnv::Static()->AppUi());
+	TBool embedded = appUi->IsEmbedded();
+
+    if ( appUi && appUi->CheckCourtesyKeyEventL(aKeyEvent, aType, EFalse) == EKeyWasConsumed )
+        {
+        return EKeyWasConsumed;
+        }
+
+    // only handle the shutter key if not in embedded mode
+    if ( !embedded )
+        {
+        if( aType == EEventKeyUp )
+            {
+            iController.SetDemandKeyRelease( EFalse ); 
+            }
+        
+        TBool captureKey = IsCaptureKeyL( aKeyEvent, aType );
+        
+        // consume the ECameraKey and exit post capture
+        if ( iView.IsForeground() && 
+                ( ( captureKey ) || 
+                ( IsShutterKeyL( aKeyEvent, aType ) && 
+                  ( appUi->CamOrientation() == ECamOrientationCamcorder || 
+                   appUi->CamOrientation() == ECamOrientationCamcorderLeft ) ) )
+            )
+            {
+            if ( aType == EEventKeyDown )
+                {
+                TInt command = ECamCmdNewPhoto;
+
+                if ( iView.Id().iUid == ECamViewIdVideoPostCapture )
+                    {
+                    command = ECamCmdNewVideo;
+                    }
+                iView.HandleCommandL( command );
+                // Demand to relese capture key in pre capture view
+                iController.SetDemandKeyRelease( ETrue ); 
+                }
+            return EKeyWasConsumed;
+            }
+        }
+        
+    if ( aType == EEventKey )
+    	{
+    	TKeyResponse keyResponse = EKeyWasNotConsumed;
+    	// Check for 'C' key, to be taken as a delete event
+        if ( aKeyEvent.iScanCode == EStdKeyBackspace )
+	    	{
+	        iView.HandleCommandL( ECamCmdDelete );                
+	        keyResponse = EKeyWasConsumed;
+	        }    
+        
+		else if ( aKeyEvent.iScanCode == EStdKeyYes )
+	    	{
+	    	// Only perform the quick send functionality if *not* in 
+	    	// embedded mode.  If we are embedded, we are technically
+	    	// already in the process of sending.
+	    	//
+	    	// In touch UI, the send key launches the dialler application.
+	    	if ( !embedded && !AknLayoutUtils::PenEnabled() )
+	    	    {
+	    	    iView.HandleCommandL( ECamCmdQuickSend );        
+	    	    }
+	        
+	        keyResponse = EKeyWasConsumed;
+	        }   
+		else
+		    {
+		    // do nothing	
+		    }	                 
+
+	    if ( !iController.IsTouchScreenSupported() )
+	        {
+	        if(iActivePalette && iActivePalette->CoeControl()->OfferKeyEventL(aKeyEvent,aType)==EKeyWasConsumed)
+	            {
+	            keyResponse = EKeyWasConsumed;
+	            }
+	        }
+        	        
+		if ( keyResponse == EKeyWasConsumed )
+			{
+			return keyResponse;
+			}	        
+    	} 	
+    return CCamContainerBase::OfferKeyEventL( aKeyEvent, aType );
+    }
+
+// -----------------------------------------------------------------------------
+// CCamPostCaptureContainer::HandleControllerEventL
+// Handle user menu selections
+// -----------------------------------------------------------------------------
+//
+void CCamPostCaptureContainer::HandleControllerEventL( TCamControllerEvent aEvent, 
+                                       TInt /*aError*/ )
+  {
+  PRINT( _L("Camera => CCamPostCaptureContainer::HandleControllerEventL") );
+  // If this is a capture complete event, or snapshot needs to be drawn
+  if ( aEvent == ECamEventCaptureComplete ||
+       aEvent == ECamEventSnapshotReady ||
+       aEvent == ECamEventSnapshotRotated )
+    {
+    DrawNow();
+    }
+  PRINT( _L("Camera <= CCamPostCaptureContainer::HandleControllerEventL") );
+  }
+
+// ---------------------------------------------------------------------------
+// CCamContainerBase::ShowZoomPaneWithTimer
+// Makes Zoom Pane visible for the period of the pane timer.
+// ---------------------------------------------------------------------------
+//
+void CCamPostCaptureContainer::ShowZoomPaneWithTimer()
+    {
+    // No implementation: only meaningful in pre-capture modes
+    PRINT(_L("Camera => CCamPostCaptureContainer::ShowZoomPaneWithTimer() - No implementation!"));
+    }
+
+// -----------------------------------------------------------------------------
+// CCamPostCaptureContainer::Redraw
+// -----------------------------------------------------------------------------
+void CCamPostCaptureContainer::Redraw(const TRect& aArea)
+    {
+    PRINT( _L("Camera => CCamPostCaptureContainer::Redraw") );
+    CWindowGc& gc = SystemGc();
+
+    const CFbsBitmap* snapshot = iController.SnapshotImage();
+    
+	if( iBatteryPaneController )
+		{
+	    if( iPaneInUse == ECamPaneCounter )
+    		{
+    		iNaviCounterControl->DrawNaviCtr( gc );
+    		}
+		}
+
+    // If snapshot contains a bitmap
+    if ( snapshot )
+        {
+        TRect ssRect( ViewFinderFrameRect() ); 
+        TRect outdatedArea( aArea );
+        TSize snapshotSize = snapshot->SizeInPixels();
+        // If necessary, the outdated area (aArea) is moved according to the
+        // cropped bitmap.
+        if ( iView.Id().iUid == ECamViewIdVideoPostCapture && 
+             iController.GetCurrentVideoResolution() != 
+             ECamVideoResolutionNHD )
+            {
+            // Get the required snapshot layout
+            // Work out the rectangle of the viewfinder bitmap to draw
+            TInt borderX = 
+                    ( snapshotSize.iWidth - ssRect.Width() ) / 2;
+            TInt borderY = 
+                    ( snapshotSize.iHeight - ssRect.Height() ) / 2;
+
+            if ( borderX < 0 )  //the display zone is reduced
+            	{
+                if ( iActivePalette && iActivePalette->CoeControl()->IsVisible() ) //active palette is exist
+                   {
+                   gc.SetBrushColor( KRgbBlack );
+                   gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+                   gc.Clear( outdatedArea ); //Clear the initial whole zone
+                   }
+            	}
+
+            outdatedArea.Move( borderX, borderY ); //new zone
+            }
+
+         if ( iController.ActiveCamera() == ECamActiveCameraSecondary )
+            {
+            // Secondary camera snapshot image doesn't fill whole screen.
+            // Black stripes are handled here. 
+            outdatedArea.Move( 0, -ssRect.iTl.iY );             
+            }
+
+        if ( outdatedArea.iBr.iX > snapshotSize.iWidth )
+            {
+            // Draw black background for the tooltip.
+            // Mirrored layout is not supported.
+            TRect blackRect = outdatedArea; 
+            blackRect.iTl.iX += snapshotSize.iWidth - outdatedArea.iTl.iX;
+            gc.SetPenStyle( CGraphicsContext::ENullPen );
+            gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+            gc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha );
+            gc.SetBrushColor( TRgb::Color16MA( 0 ) );
+            gc.DrawRect( blackRect );
+            gc.SetBrushStyle( CGraphicsContext::ENullBrush );
+            }
+
+        if ( ssRect.Contains( outdatedArea.iTl ) || !iController.IsTouchScreenSupported() )  
+            {
+            PRINT( _L("Camera <> CCamPostCaptureContainer::Redraw snapshot") );
+            gc.BitBlt( aArea.iTl, snapshot, outdatedArea);
+            }
+		}
+    
+    if( iBatteryPaneController )
+        {
+        iBatteryPaneController->Draw( gc );
+        }
+    PRINT( _L("Camera <= CCamPostCaptureContainer::Redraw") );
+  }
+
+// -----------------------------------------------------------------------------
+// CCamPostCaptureContainer::BatteryPaneUpdated
+//
+// Called by CCamBatteryPaneController when battery pane content has been updated. 
+// Re-draws background under the battery pane and the battery pane itself.
+// -----------------------------------------------------------------------------    
+//
+void CCamPostCaptureContainer::BatteryPaneUpdated()
+	{
+    CCamAppUi* appUi = static_cast<CCamAppUi*>(CEikonEnv::Static()->AppUi());
+	
+    // during sequence capture the battery icon is drawn by precapture container
+    // in sequence postcapture there is not battery icon, so there is no need
+    // to redraw battery or processing text here while sequence mode is enabled
+	if ( iBatteryPaneController && appUi && !appUi->IsBurstEnabled() )
+		{	
+		// Get the battery pane rectangle	
+		TRect rect = iBatteryPaneController->Rect();	
+
+		// Activate Gc 
+		ActivateGc();	
+
+		// Invalidate the battery pane area
+		RWindow window = Window();  
+		window.Invalidate( rect );
+		window.BeginRedraw( rect );			
+
+		// Redraw the background in that area
+		iUpdatingBatteryPane = ETrue;
+		Redraw( rect );	
+		iUpdatingBatteryPane = EFalse;
+
+		// Draw the battery pane
+		CWindowGc& gc = SystemGc();
+
+		
+		//Redraw the prosessing text before battery icon 
+        if ( iProcessingText &&  appUi && 
+            iController.ActiveCamera() != ECamActiveCameraSecondary &&
+            ( ECamCapturing == iController.CurrentOperation() ||
+             ECamCompleting == iController.CurrentOperation() ) )  
+            {
+            // When iProcessingText exists (and we are in correct state), the processing
+            // image text needs to be drawn.
+            gc.SetBrushColor( KRgbWhite );
+            gc.SetBrushStyle( CGraphicsContext::ENullBrush );
+            iProcessingTextLayout.DrawText( gc, *iProcessingText, ETrue, KRgbBlack );      
+            }
+
+
+ 	 	//iBatteryPaneController->Draw( gc );
+ 		 		
+ 		// Tell the window redraw is finished and deactivate Gc 		
+ 		window.EndRedraw();
+		DeactivateGc();        
+		}
+	
+	}
+	
+// -----------------------------------------------------------------------------
+// CCamPostCaptureContainer::HandleResourceChange
+//
+// Passes resource changes to battery pane controller
+// -----------------------------------------------------------------------------    
+//  
+void
+CCamPostCaptureContainer::HandleResourceChange( TInt aType )
+    {  
+    if( iBatteryPaneController )
+        {
+        // Inform battery pane of the resource change	
+        iBatteryPaneController->HandleResourceChange( aType );
+         }	
+  	
+    CCamContainerBase::HandleResourceChange( aType );	
+    }	
+
+
+// ---------------------------------------------------------------------------
+// HandleAppEvent <<virtual>>
+//
+// ---------------------------------------------------------------------------
+//
+void 
+CCamPostCaptureContainer::HandleAppEvent( const TCamAppEvent& aEvent )
+  {
+  PRINT( _L("Camera => CCamPostCaptureContainer::HandleAppEvent") );
+
+  switch( aEvent )
+    {
+    case ECamAppEventFocusGained:
+      {
+      iCheckForFileNameChange = ETrue;
+      if( iBatteryPaneController )
+        iBatteryPaneController->Pause( EFalse );
+      break;
+      }
+    case ECamAppEventFocusLost:
+      {
+      if( iBatteryPaneController )
+        iBatteryPaneController->Pause( ETrue );
+      break;
+      }
+    default:
+      {
+      break;
+      }
+    }
+
+  PRINT( _L("Camera <= CCamPostCaptureContainer::HandleAppEvent") );
+  }
+
+// -----------------------------------------------------------------------------
+// CCamPostCaptureContainer::HandlePointerEventL
+//
+// Handles pointer events; From CCoeControl
+// -----------------------------------------------------------------------------    
+//  
+void CCamPostCaptureContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+    {
+    if ( iView.Id().iUid == ECamViewIdVideoPostCapture )
+        {
+        TRect containerRect = Rect();
+        TRect playIconRect(containerRect.Center() - TPoint(35,23), TSize(70,46));
+        if( playIconRect.Contains(aPointerEvent.iPosition) )
+            {
+            if ( aPointerEvent.iType == TPointerEvent::EButton1Down || aPointerEvent.iType == TPointerEvent::EDrag)  
+                {
+                if(!iDraggedInAlready)
+                    {
+                    MTouchFeedback* feedback = MTouchFeedback::Instance(); 
+                    if ( feedback )
+                        {
+                        feedback->InstantFeedback( ETouchFeedbackBasicButton );        
+                        }
+                    iDraggedInAlready = ETrue;
+                    iPlayIconPressed = ETrue;
+                    DrawNow();
+                    }
+                }
+            else if(aPointerEvent.iType == TPointerEvent::EButton1Up )
+                {
+                iPlayIconPressed = EFalse;
+                iDraggedInAlready = EFalse;
+                //feedback->InstantFeedback( ETouchFeedbackBasicButton );
+                iView.HandleCommandL(ECamCmdPlay);
+                }
+            }
+        else
+            {
+            iDraggedInAlready = EFalse;
+            iPlayIconPressed = EFalse;
+            DrawNow();
+            }
+        }
+    }
+	
+// End of File