Revision: 201013 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 14 Apr 2010 15:41:04 +0300
branchRCL_3
changeset 18 51dda465e618
parent 16 d486e5e3cc9a
child 20 38fb6f7eacd5
Revision: 201013 Kit: 201015
camerauis/cameraapp/build/iconlist.txt
camerauis/cameraapp/generic/GsCamcorderPlugin/inc/GSCamQualitySettingContainer.h
camerauis/cameraapp/generic/GsCamcorderPlugin/src/GSCamQualitySettingContainer.cpp
camerauis/cameraapp/generic/common/src/CamCaptureSetupListItemDrawer.cpp
camerauis/cameraapp/generic/data/nhdcamsettings.rss
camerauis/cameraapp/generic/data/vgacamsettings.rss
camerauis/cameraapp/generic/inc/CamZoomModel.h
camerauis/cameraapp/generic/inc/CamZoomPane.h
camerauis/cameraapp/generic/src/CamAppController.cpp
camerauis/cameraapp/generic/src/CamAppui.cpp
camerauis/cameraapp/generic/src/CamCaptureSetupContainer.cpp
camerauis/cameraapp/generic/src/CamCaptureSetupSlider.cpp
camerauis/cameraapp/generic/src/CamCaptureSetupViewBase.cpp
camerauis/cameraapp/generic/src/CamInfoListBoxContainer.cpp
camerauis/cameraapp/generic/src/CamLocationIconController.cpp
camerauis/cameraapp/generic/src/CamPostCaptureContainer.cpp
camerauis/cameraapp/generic/src/CamPreCaptureViewBase.cpp
camerauis/cameraapp/generic/src/CamSettingsModel.cpp
camerauis/cameraapp/generic/src/CamVideoPreCaptureContainer.cpp
camerauis/cameraapp/generic/src/CamZoomModel.cpp
camerauis/cameraapp/generic/src/CamZoomPane.cpp
camerauis/cameraapp/generic/src/cameracontroller/camcameracontroller.cpp
camerauis/cameraapp/generic/src/camstartuplogo.cpp
--- a/camerauis/cameraapp/build/iconlist.txt	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/build/iconlist.txt	Wed Apr 14 15:41:04 2010 +0300
@@ -163,3 +163,5 @@
 -c8,8 qgn_bg_lcam_vid_postcap_play_pressed.svg
 -c8,1 qgn_indi_mg_tb_edit.svg
 -c8,8 qgn_menu_cams.svg
+-c8,1 qgn_indi_vid4_tb_still.svg
+-c8,1 qgn_indi_vid4_tb_video.svg
--- a/camerauis/cameraapp/generic/GsCamcorderPlugin/inc/GSCamQualitySettingContainer.h	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/GsCamcorderPlugin/inc/GSCamQualitySettingContainer.h	Wed Apr 14 15:41:04 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2007-2010 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"
@@ -284,8 +284,6 @@
         CGSCamQualitySettingSlider* iSlider;
         // The current capture mode (video/still)
         TCamCameraMode iMode;
-        // The current storage location
-        TCamMediaStorage iStorageLocation;
 
         // Array of supported qualities
         RArray<TInt> iSupportedQualitiesArray;
--- a/camerauis/cameraapp/generic/GsCamcorderPlugin/src/GSCamQualitySettingContainer.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/GsCamcorderPlugin/src/GSCamQualitySettingContainer.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2007-2010 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"
@@ -66,12 +66,7 @@
     iParent( aParent ),
     iMode      ( aMode       )
   {
-  TInt key = (ECamControllerVideo == iMode)
-             ? ECamSettingItemVideoMediaStorage
-             : ECamSettingItemPhotoMediaStorage;
-  // Get the total remaining record time from the controller
-  iStorageLocation = 
-    static_cast<TCamMediaStorage>( iController.IntegerSettingValue( key ) );
+
   }
 
 // -----------------------------------------------------------------------------
@@ -565,10 +560,15 @@
 //
 void CGSCamQualitySettingContainer::DrawStorageIcon( CWindowGc& aGc ) const
     {
+    TInt key = (ECamControllerVideo == iMode)
+             ? ECamSettingItemVideoMediaStorage
+             : ECamSettingItemPhotoMediaStorage;
+    TCamMediaStorage storageLocation = 
+        static_cast<TCamMediaStorage>( iController.IntegerSettingValue( key ) );
     CFbsBitmap* icon = NULL;
     CFbsBitmap* mask = NULL;
 
-    switch( iStorageLocation )
+    switch( storageLocation )
         {
         case ECamMediaStoragePhone:
             {
--- a/camerauis/cameraapp/generic/common/src/CamCaptureSetupListItemDrawer.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/common/src/CamCaptureSetupListItemDrawer.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -283,9 +283,9 @@
         layoutText.LayoutText( aActualItemRect, iTxtLayout );  
         // ...Pass the text to be drawn, into the text layout object
         // ...and draw it.    
-        if( !iFullySkinned )
+        if( !iFullySkinned && !aItemIsCurrent )
             {
-            color=KRgbWhite;       
+            color = KRgbWhite;       
             }
 
         layoutText.DrawText( *iGc, iModel.ItemText( aItemIndex ), 
@@ -319,9 +319,9 @@
         layoutText.LayoutText( aActualItemRect, iTxtWithRbLayout );
         // ...Pass the text to be drawn, into the text layout object
         // ...and draw it.    
-        if( !iFullySkinned )
+        if( !iFullySkinned && !aItemIsCurrent )
             {
-            color=KRgbWhite;       
+            color = KRgbWhite;       
             }
 
         layoutText.DrawText( *iGc, iModel.ItemText( aItemIndex ), ETrue, color );
@@ -478,11 +478,15 @@
         if ( control )
             {
             iGc->SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha );
-            iGc->SetPenSize( TSize( 1, 1 ) );
-            iGc->SetPenStyle( CGraphicsContext::EDottedPen );
+            iGc->SetPenColor( TRgb( 0x00ffffff, KToolBarExtensionBgAlpha ) );
+            iGc->SetPenStyle( CGraphicsContext::ENullPen );
             iGc->SetBrushColor( TRgb( KToolbarExtensionBgColor, KToolBarExtensionBgAlpha ) );
             iGc->SetBrushStyle( CGraphicsContext::ESolidBrush );
-            iGc->DrawRect( aActualItemRect );            
+            iGc->DrawRect( aActualItemRect );
+            iGc->SetPenSize( TSize( 1, 3 ) );
+            iGc->SetPenStyle( CGraphicsContext::ESolidPen );
+            iGc->DrawLine( TPoint( aActualItemRect.iTl.iX ,
+                    aActualItemRect.iBr.iY ), aActualItemRect.iBr );
             }
         }
 // ---------------------------------------------------------
--- a/camerauis/cameraapp/generic/data/nhdcamsettings.rss	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/data/nhdcamsettings.rss	Wed Apr 14 15:41:04 2010 +0300
@@ -1080,8 +1080,8 @@
                     AVKON_BUTTON_STATE
                         {
                         bmpfile = CAMERAAPP_BITMAP_FILE;
-                        bmpid = EMbmCameraappQgn_indi_cam4_video;
-                        bmpmask = EMbmCameraappQgn_indi_cam4_video_mask;
+                        bmpid = EMbmCameraappQgn_indi_vid4_tb_video; 
+                        bmpmask = EMbmCameraappQgn_indi_vid4_tb_video_mask;
                         helptxt = qtn_lcam_tt_video_mode;
                         extension = r_cam_ext_qgn_indi_cam4_video;
                         }
@@ -1157,8 +1157,8 @@
                     AVKON_BUTTON_STATE
                         {
                         bmpfile = CAMERAAPP_BITMAP_FILE;
-                        bmpid = EMbmCameraappQgn_indi_cam4_video;
-                        bmpmask = EMbmCameraappQgn_indi_cam4_video_mask;
+                        bmpid = EMbmCameraappQgn_indi_vid4_tb_video; 
+                        bmpmask = EMbmCameraappQgn_indi_vid4_tb_video_mask;
                         helptxt = qtn_lcam_tt_video_mode;
                         extension = r_cam_ext_qgn_indi_cam4_video;
                         }
@@ -1252,8 +1252,8 @@
                     AVKON_BUTTON_STATE
                         {
                         bmpfile = CAMERAAPP_BITMAP_FILE;
-                        bmpid = EMbmCameraappQgn_indi_cam4_camera; 
-                        bmpmask = EMbmCameraappQgn_indi_cam4_camera_mask; 
+                        bmpid = EMbmCameraappQgn_indi_vid4_tb_still; 
+                        bmpmask = EMbmCameraappQgn_indi_vid4_tb_still_mask; 
                         helptxt = qtn_lcam_tt_still_mode;
                         extension = r_cam_ext_qgn_indi_cam4_camera;
                         }
@@ -1330,8 +1330,8 @@
                     AVKON_BUTTON_STATE
                         {
                         bmpfile = CAMERAAPP_BITMAP_FILE;
-                        bmpid = EMbmCameraappQgn_indi_cam4_camera; 
-                        bmpmask = EMbmCameraappQgn_indi_cam4_camera_mask; 
+                        bmpid = EMbmCameraappQgn_indi_vid4_tb_still; 
+                        bmpmask = EMbmCameraappQgn_indi_vid4_tb_still_mask; 
                         helptxt = qtn_lcam_tt_still_mode;
                         extension = r_cam_ext_qgn_indi_cam4_camera;
                         }
@@ -1408,8 +1408,8 @@
                     AVKON_BUTTON_STATE
                         {
                         bmpfile = CAMERAAPP_BITMAP_FILE;
-                        bmpid = EMbmCameraappQgn_indi_cam4_video;
-                        bmpmask = EMbmCameraappQgn_indi_cam4_video_mask;
+                        bmpid = EMbmCameraappQgn_indi_vid4_tb_video; 
+                        bmpmask = EMbmCameraappQgn_indi_vid4_tb_video_mask;
                         helptxt = qtn_lcam_tt_video_mode;
                         extension = r_cam_ext_qgn_indi_cam4_video;
                         }
@@ -2303,8 +2303,8 @@
                     AVKON_BUTTON_STATE
                         {
                         bmpfile = CAMERAAPP_BITMAP_FILE;
-                        bmpid = EMbmCameraappQgn_indi_cam4_camera; 
-                        bmpmask = EMbmCameraappQgn_indi_cam4_camera_mask; 
+                        bmpid = EMbmCameraappQgn_indi_vid4_tb_still; 
+                        bmpmask = EMbmCameraappQgn_indi_vid4_tb_still_mask; 
                         helptxt = qtn_lcam_tt_still_mode;
                         extension = r_cam_ext_qgn_indi_cam4_camera;
                         }
@@ -2499,9 +2499,9 @@
                     {
                     AVKON_BUTTON_STATE
                         {
-                        bmpfile = CAMERAAPP_BITMAP_FILE;
-                        bmpid = EMbmCameraappQgn_indi_cam4_camera; 
-                        bmpmask = EMbmCameraappQgn_indi_cam4_camera_mask; 
+                        bmpfile = CAMERAAPP_BITMAP_FILE; 
+                        bmpid = EMbmCameraappQgn_indi_vid4_tb_still; 
+                        bmpmask = EMbmCameraappQgn_indi_vid4_tb_still_mask; 
                         helptxt = qtn_lcam_tt_still_mode;
                         extension = r_cam_ext_qgn_indi_cam4_camera;
                         }
--- a/camerauis/cameraapp/generic/data/vgacamsettings.rss	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/data/vgacamsettings.rss	Wed Apr 14 15:41:04 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2008-2010 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"
@@ -1081,8 +1081,8 @@
                     AVKON_BUTTON_STATE
                         {
                         bmpfile = CAMERAAPP_BITMAP_FILE;
-                        bmpid = EMbmCameraappQgn_indi_cam4_video;
-                        bmpmask = EMbmCameraappQgn_indi_cam4_video_mask;
+                        bmpid = EMbmCameraappQgn_indi_vid4_tb_video; 
+                        bmpmask = EMbmCameraappQgn_indi_vid4_tb_video_mask;
                         helptxt = qtn_lcam_tt_video_mode;
                         extension = r_cam_ext_qgn_indi_cam4_video;
                         }
@@ -1157,8 +1157,8 @@
                     AVKON_BUTTON_STATE
                         {
                         bmpfile = CAMERAAPP_BITMAP_FILE;
-                        bmpid = EMbmCameraappQgn_indi_cam4_video;
-                        bmpmask = EMbmCameraappQgn_indi_cam4_video_mask;
+                        bmpid = EMbmCameraappQgn_indi_vid4_tb_video; 
+                        bmpmask = EMbmCameraappQgn_indi_vid4_tb_video_mask;
                         helptxt = qtn_lcam_tt_video_mode;
                         extension = r_cam_ext_qgn_indi_cam4_video;
                         }
@@ -1231,9 +1231,9 @@
                     {
                     AVKON_BUTTON_STATE
                         {
-                        bmpfile = CAMERAAPP_BITMAP_FILE;
-                        bmpid = EMbmCameraappQgn_indi_cam4_camera; 
-                        bmpmask = EMbmCameraappQgn_indi_cam4_camera_mask; 
+                        bmpfile = CAMERAAPP_BITMAP_FILE; 
+                        bmpid = EMbmCameraappQgn_indi_vid4_tb_still; 
+                        bmpmask = EMbmCameraappQgn_indi_vid4_tb_still_mask; 
                         helptxt = qtn_lcam_tt_still_mode;
                         extension = r_cam_ext_qgn_indi_cam4_camera;
                         }
@@ -1309,8 +1309,8 @@
                     AVKON_BUTTON_STATE
                         {
                         bmpfile = CAMERAAPP_BITMAP_FILE;
-                        bmpid = EMbmCameraappQgn_indi_cam4_camera; 
-                        bmpmask = EMbmCameraappQgn_indi_cam4_camera_mask; 
+                        bmpid = EMbmCameraappQgn_indi_vid4_tb_still; 
+                        bmpmask = EMbmCameraappQgn_indi_vid4_tb_still_mask; 
                         helptxt = qtn_lcam_tt_still_mode;
                         extension = r_cam_ext_qgn_indi_cam4_camera;
                         }
@@ -1632,8 +1632,8 @@
                                 AVKON_BUTTON_STATE
                                     {
                                     bmpfile = CAMERAAPP_BITMAP_FILE;
-                                    bmpid = EMbmCameraappQgn_indi_cam4_video;
-                                    bmpmask = EMbmCameraappQgn_indi_cam4_video_mask;
+                                    bmpid = EMbmCameraappQgn_indi_vid4_tb_video; 
+                                    bmpmask = EMbmCameraappQgn_indi_vid4_tb_video_mask;
                                     txt = qtn_lcam_tb_switch_video_mode;
                                     extension = r_cam_ext_qgn_indi_cam4_video;
                                     }
@@ -2378,8 +2378,8 @@
                                  AVKON_BUTTON_STATE
                                      {
                                      bmpfile = CAMERAAPP_BITMAP_FILE;
-                                     bmpid = EMbmCameraappQgn_indi_cam4_camera;
-                                     bmpmask = EMbmCameraappQgn_indi_cam4_camera_mask;
+                                     bmpid = EMbmCameraappQgn_indi_vid4_tb_still; 
+                                     bmpmask = EMbmCameraappQgn_indi_vid4_tb_still_mask; 
                                      txt = qtn_lcam_tb_switch_mode;
                                      extension = r_cam_ext_qgn_indi_cam4_camera;
                                      }
@@ -2536,8 +2536,8 @@
                                 AVKON_BUTTON_STATE
                                     {
                                     bmpfile = CAMERAAPP_BITMAP_FILE;
-                                    bmpid = EMbmCameraappQgn_indi_cam4_camera;
-                                    bmpmask = EMbmCameraappQgn_indi_cam4_camera_mask;
+                                    bmpid = EMbmCameraappQgn_indi_vid4_tb_still; 
+                                    bmpmask = EMbmCameraappQgn_indi_vid4_tb_still_mask; 
                                     txt = qtn_lcam_tb_switch_mode;
                                     extension = r_cam_ext_qgn_indi_cam4_camera;
                                     }
--- a/camerauis/cameraapp/generic/inc/CamZoomModel.h	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/inc/CamZoomModel.h	Wed Apr 14 15:41:04 2010 +0300
@@ -202,6 +202,13 @@
     * @since 3.0
     */                        
     void ResetZoomTo1x();
+    
+    /***
+     * Use an external zoom multiplier factor to zoom quickly
+     * with lesser number of transitions
+     * @since 5.1
+     */
+    void SetZoomMultiplier( TInt aZoomStepMultiplier );
 
   private:
     
@@ -387,6 +394,10 @@
     
     // Max allowed zoom step (taking into account optical, digital and extended)
     TInt iMaxZoomStep;
+
+    // Zoom step/jump multiplier for skipping some zoom levels 
+    // (for quick zooming to max and min zoom levels)  
+    TInt iZoomStepMultiplier;
     
     // Stores the current state of the model, and the last-notified
     // engine state.
--- a/camerauis/cameraapp/generic/inc/CamZoomPane.h	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/inc/CamZoomPane.h	Wed Apr 14 15:41:04 2010 +0300
@@ -242,6 +242,25 @@
         TBool IsZoomAtMinimum() const;
 
         /**
+        * Returns whether the current zoom value is the maximum zoom
+        * @since 5.1
+        * @return Whether the current zoom value is the maximum zoom
+        */
+        TBool IsZoomAtMaximum() const;
+
+        /**
+        * Zooms to max zoom value
+        * @since 5.1
+        */                        
+        void ZoomToMaximum();
+
+        /**
+        * Zooms to min zoom value
+        * @since 5.1
+        */                        
+        void ZoomToMinimum();
+
+        /**
         * Stops all zooming activity
         */
         void StopZoom();
--- a/camerauis/cameraapp/generic/src/CamAppController.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/src/CamAppController.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -2816,8 +2816,14 @@
         appUi->SetAssumePostCaptureView( EFalse ); 
         } 
       }
-
-    if ( Busy() )
+      
+    TBool cancelingAutoFocus = ( ECamControllerImage == CurrentMode() && 
+                                           iInfo.iActiveCamera == ECamActiveCameraPrimary &&
+                                           iConfigManager && 
+                                           iConfigManager->IsAutoFocusSupported() && 
+                                           iAFCancelInProgress );                                           
+                                                                                      
+    if ( Busy() || cancelingAutoFocus )
       {
       PRINT( _L("Camera <> CCamAppController::ReleaseCamera: set release pending") );
       iPendingRelease = ETrue;
@@ -2842,6 +2848,13 @@
         TRAP_IGNORE ( IssueDirectRequestL( ECamRequestImageCancel ) );
         NotifyControllerObservers( ECamEventCaptureComplete, KErrCancel );          
         }
+      //In SetOperation(), it notify observer with ECamEventOperationStateChanged, 
+      //the clear work for flash indicator flag can be done with ECamEventOperationStateChanged in some abnormal cases.
+      if ( ECamControllerImage == CurrentMode() && iInfo.iActiveCamera == ECamActiveCameraPrimary )
+        {             
+        SetOperation( ECamNoOperation );
+        }
+
         
       //iInfo.iMode            = ECamControllerShutdown;
       //iInfo.iTargetMode      = ECamControllerIdle;
--- a/camerauis/cameraapp/generic/src/CamAppui.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/src/CamAppui.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -2508,6 +2508,7 @@
     case ECamEventSaveLocationChanged:
         {
         PRINT( _L( "Camera <> case ECamEventSaveLocationChanged" ) )
+        DismissMemoryNoteL();
         if ( IsMMCRemovedNotePending() && 
            ( CamUtility::MemoryCardStatus() != ECamMemoryCardNotInserted ) )
             {
@@ -2518,6 +2519,10 @@
             {
             TRAP_IGNORE( HandleCommandL( ECamCmdRedrawScreen ) );
             }
+        if ( ECamViewStatePostCapture == iViewState )
+            {
+            iTargetViewState = ECamViewStatePreCapture;
+            }
         break;
         }   
 
@@ -4356,11 +4361,12 @@
         else if(IsMemoryFullOrUnavailable( storeToCheck ))
             {
             HBufC* text = StringLoader::LoadLC(R_NOTE_TEXT_MEMORY_FULL);
-            CAknStaticNoteDialog* note = new( ELeave ) CAknStaticNoteDialog;
-            note->PrepareLC( R_CAM_OOM_NOTE_OK_CANCEL);
-            note->SetTextL( *text );
+            iMemoryNote = new( ELeave ) CAknStaticNoteDialog;
+            iMemoryNote->PrepareLC( R_CAM_OOM_NOTE_OK_CANCEL);
+            iMemoryNote->SetTextL( *text );
             iController.StopIdleTimer();
-            TInt ret = note->RunDlgLD();
+            TInt ret = iMemoryNote->RunDlgLD();
+            iMemoryNote = NULL;
             CleanupStack::PopAndDestroy( text );
             if(EAknSoftkeyOk == ret)
                 {
@@ -4412,10 +4418,11 @@
                                                 R_CAM_MEMORY_SELECT_DIALOG,
                                                 EFalse,
                                                 supportedMemTypes );
+                CleanupStack::PushL(memoryDialog);
                 TDriveNumber driveNumber = static_cast<TDriveNumber>(KErrNotFound);    
                 CAknCommonDialogsBase::TReturnKey result = 
                                 memoryDialog->ExecuteL( driveNumber );
-
+                CleanupStack::PopAndDestroy(memoryDialog);
                 if ( result != CAknCommonDialogsBase::TReturnKey(
                                 CAknCommonDialogsBase::ERightSoftkey) )
                     {
--- a/camerauis/cameraapp/generic/src/CamCaptureSetupContainer.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/src/CamCaptureSetupContainer.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -374,7 +374,8 @@
         iController.CurrentMode() == ECamControllerShutdown )
         {
         if( !iController.IsViewFinding() && iViewFinding 
-           && IsCaptureKeyL( aKeyEvent, aType ) )             
+            && ( IsCaptureKeyL( aKeyEvent, aType )
+            || IsShutterKeyL( aKeyEvent, aType ) ) )
             {
             PRINT( _L("Camera <> CCamCaptureSetupContainer::OfferKeyEventL coming back from standby" ))
             ReserveAndStartVF();
@@ -391,9 +392,11 @@
         // If VF was stopped by stand-by-timer, restart VF here
         ReserveAndStartVF();
         }
-
-    // If the Ok button is pressed, select the current item
-    if ( aKeyEvent.iCode == EKeyOK && aKeyEvent.iRepeats == 0 && aType == EEventKey )
+    
+    // If the Ok button or shutter key is pressed, select the current item
+    if ( ( aKeyEvent.iCode == EKeyOK && aKeyEvent.iRepeats == 0 && aType == EEventKey ) ||
+         ( aType == EEventKeyDown && 
+         ( IsCaptureKeyL( aKeyEvent, aType ) || IsShutterKeyL( aKeyEvent, aType ) ) ) )  
         {
         TKeyResponse response = iCaptureSetupControl->OfferKeyEventL( aKeyEvent, aType );
         iView.HandleCommandL( EAknSoftkeyOk );
--- a/camerauis/cameraapp/generic/src/CamCaptureSetupSlider.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/src/CamCaptureSetupSlider.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -422,18 +422,12 @@
     else
         {
         gc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha );
+        gc.SetPenSize( TSize (1,1) );
+        gc.SetPenStyle( CGraphicsContext::ENullPen );
+        gc.SetPenColor( TRgb( 0x00ffffff, KToolBarExtensionBgAlpha ) );
         gc.SetBrushColor( TRgb( KToolbarExtensionBgColor, KToolBarExtensionBgAlpha ) );
         gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
         gc.DrawRect( Rect() );            
-        // Reset the brush after use (otherwise anything drawn
-        // after the viewfinder will also show viewfinder frames)    
-        gc.SetDrawMode( CGraphicsContext::EDrawModePEN );
-        TSize penSize( 1, 1 );
-        gc.SetPenSize( penSize );
-        gc.SetPenStyle( CGraphicsContext::EDottedPen );
-        gc.SetPenColor( KRgbWhite );
-        gc.SetBrushStyle( CGraphicsContext::ENullBrush );
-        gc.DrawRect( Rect() );                            
         }
     
     // STEP 1: Draw the legend text
--- a/camerauis/cameraapp/generic/src/CamCaptureSetupViewBase.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/src/CamCaptureSetupViewBase.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -610,6 +610,12 @@
     SetCaptureSetupModeActive(EFalse);
 
     UpdateCbaL();
+
+    if ( Cba() )
+        {
+        Cba()->DrawNow();
+        }
+		
     SetTitlePaneTextL();  
     CleanupStack::Pop(); // CleanupExit
 
@@ -879,6 +885,12 @@
             }
       	SetSceneSettingMode(EFalse);
         UpdateCbaL();
+
+       if ( Cba() )
+    	    {
+    	    Cba()->DrawNow();
+    	    }
+	
         SetTitlePaneTextL();
         CleanupStack::Pop(); // CleanupExit
         
@@ -936,6 +948,12 @@
         }
     SetInfoListBoxMode(EFalse);
     UpdateCbaL();
+
+    if ( Cba() )
+        {
+        Cba()->DrawNow();
+        }
+		
     SetTitlePaneTextL();
     CleanupStack::Pop(); // CleanupExit
 
--- a/camerauis/cameraapp/generic/src/CamInfoListBoxContainer.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/src/CamInfoListBoxContainer.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -394,10 +394,24 @@
     const TKeyEvent& aKeyEvent,
     TEventCode aType )
     {
+    if( iController.CurrentMode() == ECamControllerIdle || 
+        iController.CurrentMode() == ECamControllerShutdown )
+        {
+        if( !iController.IsViewFinding() && !iSkinnedBackGround
+            && ( IsCaptureKeyL( aKeyEvent, aType ) 
+            || IsShutterKeyL( aKeyEvent, aType ) ) )
+            {
+            PRINT( _L("Camera <> CCamInfoListBoxContainer::OfferKeyEventL coming back from standby" ))
+            ReserveAndStartVF();
+            }
+        return EKeyWasNotConsumed;
+        }
     iController.StartIdleTimer();
-
-    // If the Ok button is pressed, select the current item
-    if ( aKeyEvent.iCode == EKeyOK && aKeyEvent.iRepeats == 0 && aType == EEventKey )
+    
+    // If the Ok button or shutter key is pressed, select the current item
+    if ( ( aKeyEvent.iCode == EKeyOK && aKeyEvent.iRepeats == 0 && aType == EEventKey ) ||
+         ( aType == EEventKeyDown && 
+         ( IsCaptureKeyL( aKeyEvent, aType ) || IsShutterKeyL( aKeyEvent, aType ) ) ) )
         {
         TKeyResponse response = iListBox->OfferKeyEventL( aKeyEvent, aType );
         iView.HandleCommandL( EAknSoftkeySelect );
--- a/camerauis/cameraapp/generic/src/CamLocationIconController.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/src/CamLocationIconController.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -402,13 +402,9 @@
     {
     PRINT( _L("Camera => CCamLocationIconController::Draw") );
 
-    // draw location indicator icon only for main camera
-    if ( iController.ActiveCamera() == ECamActiveCameraPrimary )
-          {
-          // Make sure no brush is being used
-          aGc.SetBrushStyle( CGraphicsContext::ENullBrush );    
-          iLocationIndicators[iLocationState]->Draw( aGc );
-          }
+    // Make sure no brush is being used
+    aGc.SetBrushStyle( CGraphicsContext::ENullBrush );    
+    iLocationIndicators[iLocationState]->Draw( aGc );
 
     PRINT( _L("Camera <= CCamLocationIconController::Draw") );
     }    
--- a/camerauis/cameraapp/generic/src/CamPostCaptureContainer.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/src/CamPostCaptureContainer.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -774,7 +774,7 @@
             else if(aPointerEvent.iType == TPointerEvent::EButton1Up )
                 {
                 iPlayIconPressed = EFalse;
-                iDraggedInAlready = ETrue;
+                iDraggedInAlready = EFalse;
                 //feedback->InstantFeedback( ETouchFeedbackBasicButton );
                 iView.HandleCommandL(ECamCmdPlay);
                 }
--- a/camerauis/cameraapp/generic/src/CamPreCaptureViewBase.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/src/CamPreCaptureViewBase.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -64,6 +64,10 @@
 CCamPreCaptureViewBase::~CCamPreCaptureViewBase()
   {
   PRINT( _L("Camera => ~CCamPreCaptureViewBase") );
+  if ( iGestureFw ) 
+      {
+      delete iGestureFw;
+      }
   PRINT( _L("Camera <= ~CCamPreCaptureViewBase") );
   }
 
@@ -887,9 +891,9 @@
     {
     PRINT( _L("Camera => CCamPreCaptureViewBase::ExitCaptureSetupModeL") )
      
-    CCamCaptureSetupViewBase::ExitCaptureSetupModeL();
     
     iController.SetViewfinderWindowHandle( &iContainer->Window() );
+    CCamCaptureSetupViewBase::ExitCaptureSetupModeL();
     
     if( !iController.IsViewFinding() && !iController.InVideocallOrRinging() )
       {
@@ -918,6 +922,7 @@
     	SwitchToCaptureSetupMenuModeL();
 		}
 	
+	UpdateCbaL();
     PRINT( _L("Camera <= CCamPreCaptureViewBase::ExitCaptureSetupModeL") )
     }
 
@@ -1763,8 +1768,13 @@
     PRINT( _L("Camera => CCamPreCaptureViewBase::CreateContainerL") );
 
     // Create gesture fw object, set observer and gesture interest
+    if ( iGestureFw ) 
+        {
+        delete iGestureFw;
+        }
+
     iGestureFw = CAknTouchGestureFw::NewL( *this, *iContainer );
-    iGestureFw->SetGestureInterestL( EAknTouchGestureFwGroupPinch );
+    iGestureFw->SetGestureInterestL( EAknTouchGestureFwGroupPinch | EAknTouchGestureFwGroupTap );
 
     PRINT( _L("Camera <= CCamPreCaptureViewBase::CreateContainerL") );            
     }
@@ -1779,15 +1789,14 @@
     PRINT( _L("Camera => CCamPreCaptureViewBase::HandleTouchGestureL") );
     
     // Skipped modes here
-    if ( ( iController.ActiveCamera() == ECamActiveCameraSecondary ) || 
-         ( ECamNoOperation != iController.CurrentOperation() )  )
+    if ( iController.ActiveCamera() == ECamActiveCameraSecondary )
         {
-        PRINT( _L("Camera <= CCamPreCaptureViewBase::HandleTouchGestureL") );
+        PRINT( _L("Camera <= CCamPreCaptureViewBase::HandleTouchGestureL - skipped") );
         return;
         }
 
     MAknTouchGestureFwPinchEvent *pinch = AknTouchGestureFwEventPinch( aEvent );
-    if ( pinch )
+    if ( pinch && (ECamNoOperation == iController.CurrentOperation()) )
         {
         // Determine the direction of pinch: +ve -> pinch outward / zoom / widen VF
         TInt currMove = pinch->Movement();
@@ -1817,6 +1826,31 @@
                 }
             }
         }
+    else if ( EAknTouchGestureFwDoubleTap == aEvent.Type() )
+        {
+        PRINT( _L("Camera <> *** double tap event") );
+        CCamAppUi* appUi = static_cast<CCamAppUi*>( iEikonEnv->AppUi() );
+        CCamZoomPane *zoomPane = appUi->ZoomPane();
+        
+        CCamPreCaptureContainerBase* container = static_cast<CCamPreCaptureContainerBase*>( iContainer );
+        container->ShowZoomPaneWithTimer();
+
+        // Zoom to max (if not already at max) zoom level, otherwise zoom out to min level
+        if ( !zoomPane->IsZoomAtMaximum() )
+            {
+            PRINT( _L("Camera <> Zooming to max level") );
+            zoomPane->ZoomToMaximum();
+            }
+        else
+            {
+            PRINT( _L("Camera <> Zooming out to min level") );
+            zoomPane->ZoomToMinimum();
+            }
+        }
+    else
+        {
+        PRINT1( _L("Camera <> HandleTouchGestureL - gesture not used, type:%d"), aEvent.Type() );
+        }
 
     PRINT( _L("Camera <= CCamPreCaptureViewBase::HandleTouchGestureL") );
     }
--- a/camerauis/cameraapp/generic/src/CamSettingsModel.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/src/CamSettingsModel.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -456,52 +456,16 @@
 TBool CCamSettingsModel::SettingValueEnabled( TInt aSettingItem, 
                                              TInt aSettingValue ) const
     {
-    TCamImageQualitySetting maxPhoto = static_cast<TCamImageQualitySetting>( iPhotoQualityLevels[iPhotoQualityLevels.Count() - 1].iPhotoResolution );
-    // If the setting value is maximum photo size, and the current
-    // scene is sports, then this setting value is disabled
-    if ( ( aSettingItem == ECamSettingItemPhotoQuality ) && 
-         ( aSettingValue == maxPhoto ) )
-        {
-        // If the current scene is sports, disable the option
-        TCamSceneId scene = static_cast< TCamSceneId >
-               ( IntegerSettingValue( ECamSettingItemDynamicPhotoScene ) );
-        if ( scene == ECamSceneSports )
-            {
-            return EFalse;
-            }
-        // Otherwise, if the current scene is the user scene and
-        // it is based on the 'Sports' scene then disable the option.
-        else if ( scene == ECamSceneUser ) 
-            {
-            // ...Get the based on scene.
-            TCamSceneId baseScene = static_cast< TCamSceneId >
-                ( IntegerSettingValue( ECamSettingItemUserSceneBasedOnScene ) );
-            if ( baseScene == ECamSceneSports )
-                {
-                return EFalse;
-                }
-            }
-        else
-            {
-            // Otherwise, the option is enabled
-            return ETrue;
-            }       
-        }
     // The high quality video setting is not supported if
     // the second camera is enabled
-    else if ( aSettingItem == ECamSettingItemVideoQuality && 
-              aSettingValue == ECamVideoQualityHigh &&
-              static_cast<CCamAppUiBase*>( 
-                    iEnv->AppUi() )->IsSecondCameraEnabled() )
+    if ( aSettingItem == ECamSettingItemVideoQuality && 
+            aSettingValue == ECamVideoQualityHigh &&
+            static_cast<CCamAppUiBase*>( 
+            iEnv->AppUi() )->IsSecondCameraEnabled() )
         {
         return EFalse;
         }
     // All other setting item values are allowed
-    else 
-        {
-        return ETrue;
-        }
-
     return ETrue;
     }
 
--- a/camerauis/cameraapp/generic/src/CamVideoPreCaptureContainer.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/src/CamVideoPreCaptureContainer.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -35,6 +35,7 @@
 #include <eikapp.h>		// For CEikApplication
 #include <AknIconUtils.h>
 #include <akntoolbar.h>
+#include <akntoolbarextension.h>
 #include <barsread.h>
 #include <cameraapp.rsg>
 #include <vgacamsettings.rsg>
@@ -477,10 +478,30 @@
 // Change the current capture state following shutter 
 // key events
 // ----------------------------------------------------
-//  
+//
 TKeyResponse CCamVideoPreCaptureContainer::HandleShutterKeyEventL( const TKeyEvent& /*aKeyEvent*/,
-                                                                   TEventCode /*aType*/ )
-    {    
+                                                                   TEventCode aType )
+    {
+    CCamAppUi* appUi = static_cast<CCamAppUi*>( iEikonEnv->AppUi() );
+          
+    if ( appUi && 
+         appUi->CurrentViewState() == ECamViewStatePreCapture &&
+         aType == EEventKeyDown &&
+         iController.IsTouchScreenSupported() )
+        {
+        CAknToolbar* toolbar = appUi->CurrentFixedToolbar();
+        if ( toolbar )
+            {
+            CAknToolbarExtension* toolbarExtension =
+            toolbar->ToolbarExtension();
+            if ( toolbarExtension && toolbarExtension->IsShown() )
+                {
+                toolbarExtension->SetShown( EFalse );
+                return EKeyWasConsumed;
+                }
+            }
+        }
+      
     return EKeyWasNotConsumed;
     }
 
--- a/camerauis/cameraapp/generic/src/CamZoomModel.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/src/CamZoomModel.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -88,6 +88,9 @@
     iCurZoomStepOptical = 0;
     iCurZoomStepDigital = 0;        
 
+    // Default zoom jump multiplier
+    iZoomStepMultiplier = 1;
+
     // Timer used to give smooth zooming    
     iZoomTimer = CPeriodic::NewL( CActive::EPriorityHigh );          
     
@@ -293,9 +296,18 @@
         }
     else
         {
-        // Start the timer to zoom-in again when timer expires
-        PRINT( _L( "CCamZoomModel::ZoomIn start zoom timer" ) );
-        StartZoomTimer();
+        // Don't restart timer (Auto-stop) timer when no zoom was done
+        if( optZoomJump || digZoomJump || extZoomJump )
+            {
+            // Start the timer to zoom-in again when timer expires
+            PRINT( _L( "CCamZoomModel::ZoomIn start zoom timer" ) );
+            StartZoomTimer();
+            }
+        else
+            {
+            PRINT( _L("Camera <> CCamZoomModel::ZoomOut - stopping zoom at boundary") );
+            StopZoom();
+            }
         }
     
     PRINT( _L( "Camera <= CCamZoomModel::ZoomIn " ) );
@@ -417,7 +429,7 @@
     {  
     PRINT( _L( "Camera => CCamZoomModel::ZoomStepsToJump (by reference)" ) );
     
-    TInt steps = ZoomStepsToJump();
+    TInt steps = iZoomStepMultiplier * ZoomStepsToJump();
 
     TCamZoomBoundary boundary = CheckBoundary();
     
@@ -669,9 +681,18 @@
         }
     else
         {
-        // Start the timer to zoom-in again when timer expires
-        PRINT( _L( "CCamZoomModel::ZoomIn start zoom timer" ) );
-        StartZoomTimer();
+        // Don't restart timer (auto-stop) timer when no zoom was done
+        if( optZoomJump || digZoomJump || extZoomJump )
+            {
+            // Start the timer to zoom-in again when timer expires
+            PRINT( _L( "CCamZoomModel::ZoomIn start zoom timer" ) );
+            StartZoomTimer();
+            }
+        else
+            {
+            PRINT( _L("Camera <> CCamZoomModel::ZoomOut - stopping zoom at boundary") );
+            StopZoom();
+            }
         }
     
     PRINT( _L( "Camera <= CCamZoomModel::ZoomOut " ) );
@@ -1046,10 +1067,13 @@
         {
         iZoomTimer->Cancel();
         }
-        
+
     // Clear the zoom state
-    iState = ECamZoomModelStateZoomNone;     
-    
+    iState = ECamZoomModelStateZoomNone;
+
+    // Reset zoom multiplier
+    iZoomStepMultiplier = 1;
+
     if ( iPauseState == EPauseStatePaused )
         {
         iPauseState = EPauseStateReleased;
@@ -1228,8 +1252,8 @@
             else
                 {
                 // use slower speed for videomode        
-                stepPeriod = iZoomLAF.iZoomSpeedDig * 2000;
-                }    
+                stepPeriod = iZoomLAF.iZoomSpeedDig * 2500;
+                }
             break;        
             }
         
@@ -1360,7 +1384,7 @@
         // Return the combined zoom value
         PRINT( _L( "Camera <= CCamZoomModel::CurrentZoom optical+digital" ) );
         return (iCurZoomStepOptical + iCurZoomStepDigital);
-        }        
+        }
     }
 
 
@@ -1498,4 +1522,17 @@
   PRINT1( _L("Camera <= CCamZoomModel::ReadCurrentResolution, got:%d"), iCurrentResolution );
   }
 
+// -----------------------------------------------------------------------------
+// SetZoomMultiplier
+// -----------------------------------------------------------------------------
+//
+void CCamZoomModel::SetZoomMultiplier( TInt aZoomStepMultiplier )
+    {
+    iZoomStepMultiplier = aZoomStepMultiplier;
+    if ( iCameraState & ECamVideoOn )
+        {
+        iZoomStepMultiplier *= 2;
+        }
+    }
+
 //  End of File  
--- a/camerauis/cameraapp/generic/src/CamZoomPane.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/src/CamZoomPane.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -47,6 +47,8 @@
 const TInt KDivisorFactor = 10000;    // integer scaling factor to avoid the 
                                      // use of floating point arithmetic
 const TInt KTouchAreaExpansion = 35; // Pixels to grow touchable area                                    
+const TInt KFastZoomMultiplier = 4;  // Multiplier to skip some zoom levels 
+                                     // to make zooming faster. Used with double tap.
 
 // ============================ MEMBER FUNCTIONS ===============================
 
@@ -526,7 +528,18 @@
     PRINT2(_L("Camera =><= CCamZoomPane::IsZoomAtMinimum iCurZoom = %d, iMinZoom = %d"), iCurZoom, iMinZoom);
     return iCurZoom == iMinZoom;
     }
-    
+
+// -----------------------------------------------------------------------------
+// CCamZoomPane::IsZoomAtMaximum
+// Returns whether the current zoom value is the maximum zoom
+// -----------------------------------------------------------------------------
+//
+TBool CCamZoomPane::IsZoomAtMaximum() const
+    {
+    PRINT2(_L("Camera =><= CCamZoomPane::IsZoomAtMaximum iCurZoom = %d, iMaxZoom = %d"), iCurZoom, iMaxZoom);
+    return iCurZoom == iMaxZoom;
+    }
+
 // -----------------------------------------------------------------------------
 // CCamZoomPane::OkToShowPane
 // Returns whether or not the Zoom Pane can currently be shown.
@@ -1211,4 +1224,26 @@
     PRINT( _L( "Camera <= CCamZoomPane::Touchfeedback" ) );
     }
 
+// -----------------------------------------------------------------------------
+// CCamZoomPane::ZoomToMinimum
+// Zooms out to min zoom level. Should be stopped by StopZoom(), if needed
+// -----------------------------------------------------------------------------
+//
+void CCamZoomPane::ZoomToMinimum()
+    {
+    iModel->SetZoomMultiplier( KFastZoomMultiplier );
+    iModel->ZoomOut();
+    }
+
+// -----------------------------------------------------------------------------
+// CCamZoomPane::ZoomToMaximum
+// Zooms in to max zoom level. Should be stopped by StopZoom(), if needed 
+// -----------------------------------------------------------------------------
+//
+void CCamZoomPane::ZoomToMaximum()
+    {
+    iModel->SetZoomMultiplier( KFastZoomMultiplier );
+    iModel->ZoomIn();
+    }
+
 //  End of File  
--- a/camerauis/cameraapp/generic/src/cameracontroller/camcameracontroller.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/src/cameracontroller/camcameracontroller.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -6428,12 +6428,34 @@
         iInfo.iVfMode == ECamViewfinderDirect )
         {
         PRINT( _L("Camera <> viewfinder active and window handle changed, restarting viewfinder...") );
-        iCamera->StopViewFinder();
-        iInfo.iVfState = ECamTriInactive;
-
-        // restart viewfinder
-        //TRAP_IGNORE( ProcessVfStartRequestL() );
-		iAppController.EnterViewfinderMode(iAppController.CurrentMode());
+         iCamera->StopViewFinder();
+        
+        if ( iViewfinderWindow != NULL )
+            {
+            iViewfinderWindow = aWindow;
+            // Use the same viewfinder position and size as for bitmap viewfinder
+            TPckgBuf<TCamParamsVfBitmap> params;
+            iSettingProvider.ProvideCameraParamL( ECameraParamVfBitmap, &params );
+            
+            CEikonEnv* env = CEikonEnv::Static();
+    
+              TInt orgPos = SetVfWindowOrdinal(); // Set visible
+              iCamera->StartViewFinderDirectL(
+                  env->WsSession(),
+                  *env->ScreenDevice(),
+                  *iViewfinderWindow,
+                  params().iRect );
+              (void) SetVfWindowOrdinal( orgPos ); // back to original
+            }
+        else
+            {
+            iCamera->StopViewFinder();
+            iInfo.iVfState = ECamTriInactive;
+
+            // restart viewfinder
+       
+		    iAppController.EnterViewfinderMode(iAppController.CurrentMode());
+            }
         }
     iViewfinderWindow = aWindow;
 
--- a/camerauis/cameraapp/generic/src/camstartuplogo.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/src/camstartuplogo.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -18,7 +18,7 @@
 #include <fbs.h>
 #include <e32math.h>
 #include <e32debug.h>
-#include <akniconutils.h>
+#include <AknIconUtils.h>
 #include <cameraapp.mbg>
 #include "camlogging.h"
 #include "camstartuplogo.h"