camerauis/cameraapp/generic/src/CamContainerBase.cpp
changeset 0 1ddebce53859
child 12 8c55c525d5d7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/src/CamContainerBase.cpp	Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,895 @@
+/*
+* 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:  Base class for all camera application containers*
+*/
+
+
+
+// INCLUDE FILES
+#include <eikmenub.h>
+#include <aknview.h>
+#include <avkon.hrh>
+#include <AknsFrameBackgroundControlContext.h>
+#include <AknsDrawUtils.h>
+#include <AknUtils.h>
+// System includes for changing the orientation.
+#include <eikenv.h>
+#include <eikappui.h>
+
+#include <activepalette2ui.h>
+#include <cameraapp.rsg>
+#include <vgacamsettings.rsg>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <layoutmetadata.cdl.h>
+#include <StringLoader.h>
+
+#include "CamContainerBase.h"
+#include "CamAppController.h"
+#include "CamLogger.h"
+#include "CamUtility.h"
+#include "CamAppUi.h"
+#include "CamNaviCounterControl.h"
+#include "CamNaviProgressBarControl.h"
+#include "CamZoomPane.h"
+#include "camactivepalettehandler.h"
+#include "CameraUiConfigManager.h"
+#include "CamViewBase.h"
+#include "cambackupcontainer.h"
+
+  static const TInt KCamBurstCounterLength = 2;
+  _LIT(KCamBurstCounterFormat, "%02d");
+
+// ================= STATIC MEMBER VARIABLES ================
+	
+MActivePalette2UI* CCamContainerBase::iActivePalette = NULL;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// Destructor
+CCamContainerBase::~CCamContainerBase()
+  {
+  PRINT( _L("Camera => ~CCamContainerBase") );
+  delete iBgContext;
+
+
+  iPrimaryZoomInKeys.Close();
+  iPrimaryZoomOutKeys.Close();
+  iSecondaryZoomInKeys.Close();
+  iSecondaryZoomOutKeys.Close();
+  
+  iPrimaryCameraCaptureKeys.Close();
+  iSecondaryCameraCaptureKeys.Close();
+  
+  iPrimaryCameraAFKeys.Close();
+
+  delete iProcessingText;
+    delete iBurstProcessingText;
+  if(iBackupContainer)
+      {
+      delete iBackupContainer;
+      iBackupContainer = NULL;
+      }
+  
+  PRINT( _L("Camera <= ~CCamContainerBase") );
+  }
+  
+// ---------------------------------------------------------------------------
+// CCamContainerBase::CCamContainerBase
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CCamContainerBase::CCamContainerBase( CCamAppController& aController,
+                                      CAknView&          aView       )
+  : iView( aView ), 
+    iController( aController )
+  {
+  }
+
+// ---------------------------------------------------------
+// CCamContainerBase::BaseConstructL
+// Symbian OS 2nd phase constructor
+// ---------------------------------------------------------
+//
+void CCamContainerBase::BaseConstructL( const TRect& aRect )
+  {
+  CreateWindowL();
+  SetRect( aRect );
+  EnableDragEvents(); 
+
+  CCamAppUiBase* appUi =  static_cast<CCamAppUiBase*>( iEikonEnv->EikAppUi() );
+  iCamOrientation = appUi->CamOrientation();
+
+  // set up the skin background context
+  CreateBackgroundContextL();
+  
+  iBackupContainer = CCamBackupContainer::NewL(iController,iView,*this);
+  
+  // zoom keys
+  iPrimaryZoomInKeys.Reset();
+  iPrimaryZoomOutKeys.Reset();
+  iSecondaryZoomInKeys.Reset();
+  iSecondaryZoomOutKeys.Reset();
+  
+  // capture keys
+  iPrimaryCameraCaptureKeys.Reset();
+  iSecondaryCameraCaptureKeys.Reset();
+  
+  // AF keys
+  iPrimaryCameraAFKeys.Reset();
+  
+  if ( iController.UiConfigManagerPtr() )
+      {
+      // Reading the zoom keys for primary and secondary camera
+      iController.UiConfigManagerPtr()->
+          SupportedPrimaryCameraZoomInKeysL( iPrimaryZoomInKeys );
+      iController.UiConfigManagerPtr()->
+                SupportedPrimaryCameraZoomOutKeysL( iPrimaryZoomOutKeys );
+      
+      // secondary camera zoom-in/out keys
+      iController.UiConfigManagerPtr()->
+                SupportedSecondaryCameraZoomInKeysL( iSecondaryZoomInKeys );
+      iController.UiConfigManagerPtr()->
+                SupportedSecondaryCameraZoomOutKeysL( iSecondaryZoomOutKeys );
+      
+      // Reading the capture keys for primary and secondary camera
+      iController.UiConfigManagerPtr()->
+                SupportedPrimaryCameraCaptureKeyL( iPrimaryCameraCaptureKeys );
+      
+      iController.UiConfigManagerPtr()->
+                      SupportedSecondaryCameraCaptureKeyL( iSecondaryCameraCaptureKeys );
+      
+      // Reading AF or half capture key press  Keys
+      iController.UiConfigManagerPtr()->SupportedPrimaryCameraAutoFocusKeyL(
+                                                       iPrimaryCameraAFKeys );
+      }
+  if ( iPrimaryZoomInKeys.Count() <= 0 || iPrimaryZoomOutKeys.Count() <= 0 ||
+       iSecondaryZoomInKeys.Count() <= 0 || iSecondaryZoomOutKeys.Count() <= 0 ||
+       iPrimaryCameraCaptureKeys.Count() <= 0 || iSecondaryCameraCaptureKeys.Count() <= 0 ||       
+       iPrimaryCameraAFKeys.Count() <= 0
+      )
+      {
+      // Leave here, if there are no configured items so that we dont panic 
+      //in any container classes derived from this base class
+      User::Leave( KErrNotSupported );
+      }
+    }
+    
+
+// ---------------------------------------------------------
+// CCamContainerBase::IsCaptureKeyL
+// Whether or not this key is considered to be a capture key
+// in the current context
+// ---------------------------------------------------------
+//
+TBool CCamContainerBase::IsCaptureKeyL( const TKeyEvent& aKeyEvent,
+                                       TEventCode aType ) 
+  {
+  PRINT1( _L( "Camera => CCamContainerBase::IsCaptureKey event type (%d)" ),  aType ); 
+  
+  // Find out if this key is a capture key
+  TBool isCaptureKey( EFalse) ;
+  
+  // Repeat events are not classed as capture keys
+  if ( aKeyEvent.iRepeats != 0 )
+    {
+    PRINT( _L( "IsCaptureKey returning false (repeat)" ) );
+    return isCaptureKey;
+    }
+  
+  CCamAppUi* appUi = static_cast<CCamAppUi*>( CEikonEnv::Static()->AppUi() );
+  if ( appUi && appUi->AppInBackground( ETrue ) )
+      {
+      PRINT( _L("IsCaptureKey returning false (AppInBackground() = true") );
+      return isCaptureKey;
+      }
+  
+  if ( ECamActiveCameraPrimary == iController.ActiveCamera() )
+      {
+      isCaptureKey = IsPrimaryCameraCaptureKey( aKeyEvent );
+      }
+  else // secondary camera
+      {
+      isCaptureKey = IsSecondaryCameraCaptureKey( aKeyEvent );
+      }  
+
+  // Each product defines which key/s are treated as capture keys.
+  // Different keys can be mapped for each active camera.
+  // Look for capture event or key up event (note that capture
+  // event is on the EEventKey for navi-key select press)
+  if ( isCaptureKey )
+      {
+      if ( aType == EEventKeyDown || aType == EEventKey || aType == EEventKeyUp || aType == EEventKeyUp )
+        {
+        if ( isCaptureKey &&
+             ( iController.UiConfigManagerPtr()->IsKeyLockWatcherSupported() && iController.IsKeyLockOn() ) )
+            {
+            isCaptureKey = !iController.IsKeyLockOn();
+            }
+        }
+      else
+        {
+        // key types doesnt match so dont consider as capture key press.
+        isCaptureKey = EFalse;
+        }  
+      }
+  PRINT1( _L( "IsCaptureKey returning %d" ), isCaptureKey );
+  return isCaptureKey;
+  }
+
+// ---------------------------------------------------------
+// CCamContainerBase::IsShutterKeyL
+// Whether or not this key is considered to be a shutter key
+// in the current context
+// ---------------------------------------------------------
+//
+TBool CCamContainerBase::IsShutterKeyL( const TKeyEvent& aKeyEvent, TEventCode /* aType */ )
+    {
+    PRINT1( _L( "Camera => CCamContainerBase::IsShutterKeyL scancode (%d)" ),  aKeyEvent.iScanCode ); 
+
+    if ( iController.UiConfigManagerPtr()
+        && iController.UiConfigManagerPtr()->IsAutoFocusSupported() )
+        {
+#ifndef __WINS__
+        if ( aKeyEvent.iScanCode == iPrimaryCameraAFKeys[0] )
+#else
+        if ( aKeyEvent.iScanCode == EProductKeyCaptureHalf )
+#endif 
+            {
+            return ETrue;
+            }
+        }
+    return EFalse;
+    }
+
+
+//
+// CCamZoomPane::CheckForZoomKey
+//
+TBool CCamContainerBase::CheckForZoomKey( const TKeyEvent& aKeyEvent )
+    {
+    return CheckInZoomKeyArray( aKeyEvent );
+    }
+
+
+//
+//
+//
+TBool CCamContainerBase::CheckInZoomKeyArray( const TKeyEvent& aKeyEvent )
+    {
+    TCamActiveCamera camera = iController.ActiveCamera();
+    TBool zoomKeyFound ( EFalse );
+
+    if ( camera == ECamActiveCameraPrimary )
+        {
+        zoomKeyFound = ( KErrNotFound != 
+                         iPrimaryZoomInKeys.Find( aKeyEvent.iScanCode ) );
+        if ( !zoomKeyFound )
+            {
+            // Its not zoom-in key, check if its zoom out key
+            zoomKeyFound = ( KErrNotFound != 
+                             iPrimaryZoomOutKeys.Find( aKeyEvent.iScanCode ) );
+            }
+        }
+    else if ( camera == ECamActiveCameraSecondary )
+        {
+        zoomKeyFound = ( KErrNotFound != 
+                         iSecondaryZoomInKeys.Find( aKeyEvent.iScanCode ) );
+        if ( !zoomKeyFound )
+            {
+            // Its not zoom-in key, check if its zoom out key
+            zoomKeyFound = ( KErrNotFound != 
+                             iSecondaryZoomOutKeys.Find( aKeyEvent.iScanCode ) );
+            }        
+        }
+    else
+        {
+        // when we reach here, it means we have no zoom keys set, we return back.
+        }
+    return zoomKeyFound;
+    }
+
+
+// ---------------------------------------------------------
+// CCamContainerBase::IsZoomKeyL
+// Whether or not this key is considered to be a shutter key
+// in the current context
+// ---------------------------------------------------------
+//
+TBool CCamContainerBase::IsZoomKeyL( const TKeyEvent& aKeyEvent,
+                                        TEventCode aType ) 
+    {
+    PRINT1( _L( "Camera => CCamContainerBase::IsZoomKeyL event type (%d)" ),  aType );  
+
+    CCamZoomPane* zoom = static_cast<CCamAppUiBase*>( iEikonEnv->EikAppUi() )->ZoomPane();    	
+    
+    // 
+    if( !ZoomAvailable() )
+    	{
+    	return EFalse;
+    	}
+  	
+  	PRINT( _L( "Camera => CCamContainerBase::IsZoomKeyL " ) );  
+
+    // It's a possible zoom key if it's an up OR down event, OR
+    // if it's a key event AND we're currently zooming 
+    if ( aType == EEventKeyUp || aType == EEventKeyDown || aType == EEventUser ||
+         ( aType == EEventKey && 
+           zoom &&
+           zoom->IsCurrentlyZooming() ) )
+        {
+        PRINT( _L( "Camera => CCamContainerBase::IsZoomKeyL A" ) )
+        return CheckForZoomKey( aKeyEvent );
+        }
+	     
+	PRINT( _L( "Camera => CCamContainerBase::IsZoomKeyL no" ) )
+    return EFalse;
+    }
+
+
+//
+// CCamContainerBase::ZoomAvailable()
+//
+TBool CCamContainerBase::ZoomAvailable()
+	{
+	PRINT( _L("Camera => CCamContainerBase::ZoomAvailable"))
+
+	// Ignore any zoom keys that come when either capturing a burst or still
+  if ( iController.SequenceCaptureInProgress() 
+    || ( ECamControllerImage == iController.CurrentMode()
+      && ECamCapturing       == iController.CurrentOperation() ) 
+    || ECamCompleting == iController.CurrentOperation()  )
+    {
+    PRINT( _L("Camera => CCamContainerBase::ZoomAvailable A false"))
+    return EFalse;
+    }
+	PRINT( _L("Camera => CCamContainerBase::ZoomAvailable yes"))
+	return ETrue;
+	}
+
+// ---------------------------------------------------------------------------
+// Window
+// ---------------------------------------------------------------------------
+//
+RWindow& 
+CCamContainerBase::Window() const
+  {
+  return CCoeControl::Window();
+  }
+
+
+// ----------------------------------------------------
+// CCamContainerBase::OfferKeyEventL
+// Handles this application view's command keys. Forwards other
+// keys to child control(s).
+// ----------------------------------------------------
+//
+TKeyResponse 
+CCamContainerBase::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+                                         TEventCode aType )
+  {
+  PRINT1( _L("Camera => CCamContainerBase::OfferKeyEventL scan code (%d)"), aKeyEvent.iScanCode )
+  // if the cancel softkey is pressed
+  if ( aKeyEvent.iScanCode == EStdKeyDevice1 )
+    {        
+    iView.HandleCommandL( EAknSoftkeyCancel );
+    }
+  // or if the select (OK) key is pressed
+  //
+  // (Note: intentionally ignoring repeat key presses here - this is a
+  // work-around as the framework is passing navi-key select repeats
+  // which we have to ignore)
+  else if ( aType == EEventKey && 
+            aKeyEvent.iCode == EKeyOK && 
+            aKeyEvent.iRepeats == 0 )
+    {
+    iView.HandleCommandL( EAknSoftkeySelect );
+    return EKeyWasConsumed; // indicate key press was processed
+    }
+    // stop video or sequence if get applications key press (short or long)
+    // in touch also send key stops
+  else if( aKeyEvent.iCode == EKeyApplication ||
+         ( iController.IsTouchScreenSupported() && 
+           aKeyEvent.iScanCode == EStdKeyYes ) ) 
+  	{
+    if ( ECamControllerVideo == iController.CurrentMode() )
+      {
+      TCamCaptureOperation operation = iController.CurrentOperation();
+      if( ECamCapturing == operation
+       || ECamPaused    == operation )
+        {
+        // Stop video 
+        iController.StopVideoRecording();
+        }
+      }
+    else if ( iController.SequenceCaptureInProgress() )
+      {
+      // Stop sequence capture
+      iController.StopSequenceCaptureL();
+      }
+    else
+    	{
+    	// empty statement to remove Lint error, MISRA required rule 60
+    	}
+  	}
+  else
+    {
+    // empty statement to remove Lint error, MISRA required rule 60
+    }
+
+  return EKeyWasNotConsumed;  // indicate key press was not processed
+  }
+
+// ----------------------------------------------------
+// CCamContainerBase::HandleForegroundEventL
+// Called to notify of change of app fore/background state
+// ----------------------------------------------------
+//
+void CCamContainerBase::HandleForegroundEventL( TBool /*aForeground*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CCamContainerBase::MopSupplyObject
+// Gets an object whose type is encapsulated by the specified TTypeUid object
+// Supplies the skin context to child controls using the MObjectProvider chain
+// ---------------------------------------------------------------------------
+//
+TTypeUid::Ptr CCamContainerBase::MopSupplyObject( TTypeUid aId )
+    {
+    if ( aId.iUid == MAknsControlContext::ETypeId )
+        {
+        return MAknsControlContext::SupplyMopObject( aId, iBgContext );
+        }
+    return CCoeControl::MopSupplyObject( aId );
+    }
+
+// ----------------------------------------------------
+// CCamContainerBase::HandleResourceChange
+// Change Client Rect and redraw when resolution changes
+// ----------------------------------------------------
+//
+void CCamContainerBase::HandleResourceChange( TInt aType )
+    {
+    PRINT( _L("Camera => CCamContainerBase::HandleResourceChange" ))
+    
+    CCamAppUi* appUi = static_cast<CCamAppUi*>( iEikonEnv->EikAppUi() );
+    if ( KEikDynamicLayoutVariantSwitch == aType )
+        {
+	    TCamOrientation orientation = appUi->CamOrientation();
+
+        if( iCamOrientation != orientation )
+            {
+            iCamOrientation = orientation;
+            if( orientation == ECamOrientationCamcorder || orientation == ECamOrientationCamcorderLeft )
+                {
+                PRINT( _L("Camera => CCamContainerBase::HandleResourceChange camcorder" ))
+                SetRect( appUi->ApplicationRect() );
+                }
+            else
+                {
+                PRINT( _L("Camera => CCamContainerBase::HandleResourceChange not camcorder" ))
+                SetRect( appUi->ClientRect() );
+                }
+            }
+        }
+            
+    CCoeControl::HandleResourceChange( aType );
+    if ( iController.IsTouchScreenSupported() ) 
+        {
+        // Update toolbar because HandleResourceChange might reload the default version
+        // Only update toolbaricons if in precaptureview.
+        if( appUi->CurrentViewState() != ECamViewStatePostCapture )
+            {
+            TRAP_IGNORE( static_cast<CCamViewBase&>( iView ).UpdateToolbarIconsL() );
+            }
+        }  
+    }
+
+
+// virtual 
+void 
+CCamContainerBase::HandleAppEvent( const TCamAppEvent& /*aEvent*/ )
+  {
+  // No action
+  }
+
+
+// ---------------------------------------------------------------------------
+// CCamContainerBase::SetPreviousViewId
+// Sets the ID of the previous view
+// ---------------------------------------------------------------------------
+//
+void CCamContainerBase::SetPreviousViewId( TCamAppViewIds aId )
+    {
+    iPrevViewId = aId;
+    }
+
+
+// ---------------------------------------------------------
+// CCamContainerBase::SetupNaviPanesL
+// Set up navi-pane and progress bar if required
+// ---------------------------------------------------------
+//    
+void CCamContainerBase::SetupNaviPanesL( TCamActiveNaviPane aNaviPane )
+	{
+	PRINT( _L("Camera => CCamContainerBase::SetupNaviPanesL" ))
+	TRect rect( Rect() );
+	
+	if( aNaviPane == ECamPaneCounter )
+		{
+        iNaviCounterControl = 
+            static_cast<CCamAppUi*>( CEikonEnv::Static()->AppUi() )->NaviCounterControl();
+	    iNaviCounterControl->SetMopParent( this );
+	    iNaviCounterControl->SetContainerWindowL( *this );  
+	    iNaviCounterControl->SetRect( Rect() );            
+	    iNaviCounterControl->MakeVisible( ETrue );
+        if ( iNaviProgressBarControl )
+            {
+            iNaviProgressBarControl->MakeVisible( EFalse );
+            }
+
+	    iPaneInUse = ECamPaneCounter;
+		}
+	else if( aNaviPane == ECamPaneProgress )
+		{
+		PRINT( _L("Camera => CCamContainerBase::SetupNaviPanesL progress" ))
+        iNaviProgressBarControl = 
+            static_cast<CCamAppUi*>( CEikonEnv::Static()->AppUi() )->NaviProgressBarControl();
+	    iNaviProgressBarControl->SetMopParent( this );
+	    iNaviProgressBarControl->SetContainerWindowL( *this );            
+	    iNaviProgressBarControl->SetRect( Rect() );            
+	    iNaviProgressBarControl->MakeVisible( ETrue );    
+        if ( iNaviCounterControl )
+            {
+            iNaviCounterControl->MakeVisible( EFalse );
+            }
+
+	    iPaneInUse = ECamPaneProgress;
+		}
+	else
+		{
+		iPaneInUse = ECamPaneUndefined;
+		}
+	PRINT( _L("Camera <= CCamContainerBase::SetupNaviPanesL" ))
+	}
+
+// ---------------------------------------------------------------------------
+// CCamContainerBase::ShowZoomPaneWithTimer
+// Makes Zoom Pane visible for the period of the pane timer.
+// ---------------------------------------------------------------------------
+//
+void CCamContainerBase::ShowZoomPaneWithTimer()
+    {
+    // No implementation: only meaningful in pre-capture modes
+    PRINT(_L("Camera => CCamContainerBase::ShowZoomPaneWithTimer() - No implementation!"));
+    }
+
+// ---------------------------------------------------------------------------
+// CCamContainerBase::CreateActivePaletteL
+// Creates the Active Palette control
+// ---------------------------------------------------------------------------
+//
+void CCamContainerBase::CreateActivePaletteL()
+    {
+    CCamAppUi* appUi = static_cast<CCamAppUi*>( CEikonEnv::Static()->AppUi() );
+    appUi->APHandler()->CreateActivePaletteL( *this, this );
+    iActivePalette = appUi->ActivePalette();
+    }
+
+// ---------------------------------------------------------------------------
+// CCamContainerBase::DestroyActivePaletteL
+// Destroys the Active Palette control
+// ---------------------------------------------------------------------------
+//
+void CCamContainerBase::DestroyActivePalette()
+    {
+    CCamAppUi* appUi = static_cast<CCamAppUi*>( CEikonEnv::Static()->AppUi() );
+    appUi->APHandler()->DestroyActivePalette();
+    iActivePalette = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CCamContainerBase::Redraw
+// -----------------------------------------------------------------------------
+void CCamContainerBase::Redraw(const TRect& /*aArea*/)
+    {
+    // Do nothing by default; may be overridden
+    }
+   	
+
+
+// -----------------------------------------------------------------------------
+// CCamContainerBase::PrepareProcessingTextL
+// -----------------------------------------------------------------------------
+//   
+void CCamContainerBase::PrepareProcessingTextL( TBool aStillMode )
+    { 
+    TAknLayoutRect vidProgressPane;
+    
+    TInt cba =  AknLayoutUtils::CbaLocation() == 
+                AknLayoutUtils::EAknCbaLocationLeft? 
+                AknLayoutUtils::EAknCbaLocationLeft : 0;
+    
+    if ( CamUtility::IsNhdDevice() )
+        {
+        vidProgressPane.LayoutRect( Rect(),
+                AknLayoutScalable_Apps::vid4_progress_pane( 
+                Layout_Meta_Data::IsLandscapeOrientation() ) );
+                
+        iProcessingTextLayout.LayoutText( vidProgressPane.Rect(), 
+                AknLayoutScalable_Apps::vid4_progress_pane_t3());  
+        }
+    else
+        {
+        vidProgressPane.LayoutRect( Rect(), 
+                AknLayoutScalable_Apps::vid6_indi_pane( cba ) ); 
+                
+        iProcessingTextLayout.LayoutText( vidProgressPane.Rect(), 
+                AknLayoutScalable_Apps::vid6_indi_pane_t4( 2 ));  
+        }
+        
+    // Delete old text 
+    if( iProcessingText )
+        {
+        delete iProcessingText;
+        iProcessingText = NULL;  
+        }
+    if( aStillMode )
+        {
+        iProcessingText = StringLoader::LoadL( R_QTN_PROCESSING_IMAGE_TEXT );  
+        }        
+/*        
+    else
+        {
+        iProcessingText = StringLoader::LoadL( R_QTN_PROCESSING_VIDEO_TEXT );  
+        }                    
+*/        
+    }
+    
+// -----------------------------------------------------------------------------
+// CCamContainerBase::DismissProcessingTextL
+// -----------------------------------------------------------------------------
+//     
+void CCamContainerBase::DismissProcessingText()
+    {
+    delete iProcessingText;
+    iProcessingText = NULL;
+    }    
+    
+// -----------------------------------------------------------------------------
+// CCamContainerBase::PrepareBurstProcessingTextL
+// -----------------------------------------------------------------------------
+//   
+void CCamContainerBase::PrepareBurstProcessingTextL()
+    {
+    PRINT( _L("Camera => CCamContainerBase::PrepareBurstProcessingTextL" ))	
+    TAknLayoutRect vidProgressPane;  
+    
+    TInt cba =  AknLayoutUtils::CbaLocation() == 
+                AknLayoutUtils::EAknCbaLocationLeft? 
+                AknLayoutUtils::EAknCbaLocationLeft : 0;
+    
+    
+    if ( CamUtility::IsNhdDevice() )
+        {
+        vidProgressPane.LayoutRect(
+                Rect(),
+                AknLayoutScalable_Apps::vid4_progress_pane( 
+                        Layout_Meta_Data::IsLandscapeOrientation() ) );
+
+        iBurstProcessingTextLayout.LayoutText( 
+                vidProgressPane.Rect(), 
+                AknLayoutScalable_Apps::vid4_progress_pane_t3() );  
+        }
+    else
+        {
+        
+        vidProgressPane.LayoutRect(
+                Rect(),
+                AknLayoutScalable_Apps::vid6_indi_pane( cba ) );
+                
+        iBurstProcessingTextLayout.LayoutText( 
+                vidProgressPane.Rect(), 
+                AknLayoutScalable_Apps::vid6_indi_pane_t4( 2 ) );
+        
+        }
+    
+    // Delete old text 
+    if( iBurstProcessingText )
+        {
+        delete iBurstProcessingText;
+        iBurstProcessingText = NULL;  
+        }
+    iBurstProcessingText = StringLoader::LoadL( 
+                           R_QTN_PROCESSING_IMAGE_TEXT );
+    PRINT( _L("Camera <= CCamContainerBase::PrepareBurstProcessingTextL" ))	                       
+    }
+ 
+// -----------------------------------------------------------------------------
+// CCamContainerBase::UpdateBurstProcessingTextL
+// -----------------------------------------------------------------------------
+//   
+void CCamContainerBase::UpdateBurstProcessingTextL( TInt aHandled, TInt aTotal )
+    {
+    PRINT( _L("Camera => CCamContainerBase::UpdateBurstProcessingTextL" ))		
+
+    // Delete old text 
+    if( iBurstProcessingText )
+        {
+        delete iBurstProcessingText;
+        iBurstProcessingText = NULL;  
+        }
+    CDesCArrayFlat* values 
+    = new (ELeave) CDesCArrayFlat( 2 );
+
+    CleanupStack::PushL( values );
+    
+    TBuf<KCamBurstCounterLength> handled;
+    TBuf<KCamBurstCounterLength> total;
+    handled.Format( KCamBurstCounterFormat, aHandled );
+    total.Format( KCamBurstCounterFormat, aTotal );
+    
+    values->AppendL( handled );
+    values->AppendL( total );
+
+#ifndef __WINS__
+    iBurstProcessingText = StringLoader::LoadL( 
+            R_QTN_PROCESSING_BURST_IMAGE_TEXT, *values );
+#endif
+    
+    CleanupStack::PopAndDestroy( values );                           
+    PRINT( _L("Camera <= CCamContainerBase::UpdateBurstProcessingTextL" ))		                           
+    }
+    
+// -----------------------------------------------------------------------------
+// CCamContainerBase::DismissBurstProcessingText
+// -----------------------------------------------------------------------------
+//     
+void CCamContainerBase::DismissBurstProcessingText()
+    {
+    delete iBurstProcessingText;
+    iBurstProcessingText = NULL;
+    }    
+        
+// ----------------------------------------------------
+// CCamContainerBase::CheckForFileName
+// 
+// ----------------------------------------------------
+//
+void CCamContainerBase::CheckForFileName( TBool aDoCheck )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CCamContainerBase::CreateBackgroundContextL
+// -----------------------------------------------------------------------------
+//     
+void CCamContainerBase::CreateBackgroundContextL()
+    {
+    if( iCamOrientation == ECamOrientationCamcorder ||
+        iCamOrientation == ECamOrientationCamcorderLeft )
+        {
+        iBgContext = CAknsBasicBackgroundControlContext::NewL( 
+            KAknsIIDQsnBgScreen, Rect(), EFalse );
+        }
+    else
+        {
+        iBgContext = CAknsBasicBackgroundControlContext::NewL( 
+            KAknsIIDQsnBgAreaMain, Rect(), EFalse );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCamContainerBase::ViewFinderFrameRect
+// -----------------------------------------------------------------------------
+//     
+TRect
+CCamContainerBase::ViewFinderFrameRect(TCamCameraMode aTargetMode) const   
+    {
+    PRINT( _L("Camera => CCamContainerBase::ViewFinderFrameRect") );
+    const TCamAppViewIds viewId = static_cast<TCamAppViewIds>( iView.Id().iUid );
+
+    TCamCameraMode cameraMode = (aTargetMode != ECamControllerIdle)
+                                        ? aTargetMode
+                                        : iController.CurrentMode();
+    
+    // In post capture view both target and current mode can be in idle mode, which
+    // would cause the use of invalid viewfinder layouts
+    if ( viewId == ECamViewIdVideoPostCapture && cameraMode == ECamControllerIdle )
+        {
+        cameraMode = ECamControllerVideo;
+        }
+    else if ( viewId == ECamViewIdStillPostCapture && cameraMode == ECamControllerIdle  )
+        {
+        cameraMode = ECamControllerImage;
+        }
+    
+    const TInt resolution = (cameraMode == ECamControllerVideo)
+                                ? iController.GetCurrentVideoResolution()
+                                : iController.GetCurrentImageResolution();
+
+    TRect rect = CamUtility::ViewfinderLayout( cameraMode, resolution );
+    PRINT( _L("Camera <= CCamContainerBase::ViewFinderFrameRect") );
+    return rect;
+    }
+
+// -----------------------------------------------------------------------------
+// CCamContainerBase::IsPrimaryCameraCaptureKey
+// -----------------------------------------------------------------------------
+//     
+TBool CCamContainerBase::IsPrimaryCameraCaptureKey( const TKeyEvent& aKeyEvent ) const
+    {
+    TBool isCapturekey( KErrNotFound != iPrimaryCameraCaptureKeys.Find( aKeyEvent.iScanCode ) );
+    CCamAppUi* appUi = static_cast<CCamAppUi*>( CEikonEnv::Static()->AppUi() );
+    if ( appUi 
+         && ( !appUi->IsToolBarVisible() || !appUi->DrawPreCaptureCourtesyUI() )
+         && ( aKeyEvent.iScanCode == EStdKeyDevice3
+              || aKeyEvent.iScanCode == EStdKeyEnter )
+         && !static_cast<CCamViewBase*>(&iView)->IsPostCapture() ) {
+        isCapturekey = ETrue;
+    }
+    return isCapturekey;
+    }
+
+// -----------------------------------------------------------------------------
+// CCamContainerBase::IsSecondaryCameraCaptureKey
+// -----------------------------------------------------------------------------
+//     
+TBool CCamContainerBase::IsSecondaryCameraCaptureKey( const TKeyEvent& aKeyEvent ) const
+    {
+    TBool isCapturekey( KErrNotFound != iSecondaryCameraCaptureKeys.Find( aKeyEvent.iScanCode ) );
+    CCamAppUi* appUi = static_cast<CCamAppUi*>( CEikonEnv::Static()->AppUi() );
+    if ( appUi 
+         && !appUi->IsToolBarVisible()
+         && ( aKeyEvent.iScanCode == EStdKeyDevice3
+              || aKeyEvent.iScanCode == EStdKeyEnter )
+         && !static_cast<CCamViewBase*>(&iView)->IsPostCapture() ) {
+        isCapturekey = ETrue;
+    }
+    return isCapturekey;            
+    }
+
+// -----------------------------------------------------------------------------
+// CCamContainerBase::CountComponentControls
+// -----------------------------------------------------------------------------
+//
+TInt CCamContainerBase::CountComponentControls() const
+    {
+    TInt index = 0;
+    if(iBackupContainer)
+        index++;
+    return index;
+    }
+
+// -----------------------------------------------------------------------------
+// CCamContainerBase::ComponentControl
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CCamContainerBase::ComponentControl(TInt aIndex) const
+    {
+    CCoeControl* control = NULL;
+     switch(aIndex)
+         {
+         case 0:
+             {
+             control = iBackupContainer;
+             }
+             break;
+         default:
+             break;
+         }
+    return control; 
+    }
+
+// End of File