--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/src/CamSidePane.cpp Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,1044 @@
+/*
+* 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: Side Pane control*
+*/
+
+
+// INCLUDE FILES
+#include <aknview.h>
+
+#include <eikenv.h>
+#include <eikappui.h> // For CCoeAppUiBase
+#include <eikapp.h> // For CEikApplication
+
+#include <barsc.h>
+#include <barsread.h>
+#include <cameraapp.rsg>
+#include <vgacamsettings.rsg>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <layoutmetadata.cdl.h>
+#include "CamAppUiBase.h"
+#include "CamAppUi.h"
+
+#include "CamAppController.h"
+#include "CamSidePane.h"
+
+#include "CamIndicator.h"
+#include "CamIndicatorData.h"
+#include "CamIndicatorResourceReader.h"
+#include "CamTimer.h"
+#include "CamSelfTimer.h"
+#include "CamLogger.h"
+#include "CamSettings.hrh"
+#include "CamUtility.h"
+#include "CameraUiConfigManager.h"
+#include "Cam.hrh"
+
+
+// CONSTANTS
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------------------------
+// CCamSidePane::NewL
+// Symbian OS two-phased constructor
+// ---------------------------------------------------------------------------
+//
+CCamSidePane* CCamSidePane::NewL( CCamAppController& aController,
+ TBool aOverlayViewFinder )
+ {
+ CCamSidePane* self = new( ELeave ) CCamSidePane( aController,
+ aOverlayViewFinder );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// Destructor
+CCamSidePane::~CCamSidePane()
+ {
+ PRINT( _L("Camera => ~CCamSidePane") );
+ RemoveObservers();
+ CCamSidePane::UnloadResourceData();
+ PRINT( _L("Camera <= ~CCamSidePane") );
+ }
+
+// ---------------------------------------------------------
+// CCamSidePane::ConstructL
+// Symbian OS 2nd phase constructor
+// ---------------------------------------------------------
+//
+void CCamSidePane::ConstructL()
+ {
+ LoadResourceDataL();
+
+ // side pane is a controller, self timer and burst mode observer
+ RegisterObserversL();
+ iVisible = ETrue;
+
+ UpdateLayout();
+ }
+
+// -----------------------------------------------------------------------------
+// CCamSidePane::LoadResourceDataL()
+// Reads in all information needed from resources
+// -----------------------------------------------------------------------------
+//
+void CCamSidePane::LoadResourceDataL()
+ {
+ TResourceReader reader;
+ CEikonEnv* eikEnv = CEikonEnv::Static();
+ eikEnv->CreateResourceReaderLC( reader, ROID(R_CAM_SIDEPANE_ID));
+
+ // create reader
+ CCamIndicatorResourceReader* resourceReader =
+ CCamIndicatorResourceReader::NewLC( reader );
+ // get indicator data from reader
+ CArrayPtrFlat<CCamIndicatorData>& indArray = resourceReader->IndicatorData();
+
+ // set up indicator data
+ TInt numindicators = indArray.Count(); // number of indicators
+ TInt numbitmaps = 0;
+ CCamIndicator* indicator = NULL;
+
+ TInt i = 0;
+
+ for ( i = 0; i < ECamIndicatorTotal; i++ )
+ {
+ User::LeaveIfError( iIndicators.Append( static_cast<CCamIndicator*>(NULL) ) );
+ }
+
+ for ( i = 0; i < numindicators; i++ )
+ {
+ CCamIndicatorData& indData = *( indArray.At( i ) );
+ indicator = CCamIndicator::NewL( indData.IndicatorRect() );
+ CleanupStack::PushL( indicator );
+ numbitmaps = indData.IndicatorBitmapCount(); // no of bitmaps for indicator
+ TInt j;
+ for ( j = 0; j < numbitmaps; j++ )
+ {
+ // side pane assumes that mask bitmap is defined after the
+ // normal one in the resource file
+ indicator->AddIconL( indData.IndicatorBitmapId( j ), // bitmap
+ indData.IndicatorBitmapId( j + 1 )); // mask
+ j++; // increment past the mask
+ }
+ iIndicators[indData.IndicatorId()] = indicator;
+ CleanupStack::Pop( indicator );
+ }
+
+ CleanupStack::PopAndDestroy( resourceReader );
+ CleanupStack::PopAndDestroy(); // reader
+ }
+
+// -----------------------------------------------------------------------------
+// CCamSidePane::ReloadResourceDataL()
+// Refreshes all resource-based information stored in the class
+// -----------------------------------------------------------------------------
+//
+void CCamSidePane::ReloadResourceDataL()
+ {
+ UnloadResourceData();
+ LoadResourceDataL();
+ }
+
+// -----------------------------------------------------------------------------
+// CCamSidePane::UnloadResourceData()
+// Frees all dynamic resources allocated in LoadResourceDataL
+// -----------------------------------------------------------------------------
+//
+void CCamSidePane::UnloadResourceData()
+ {
+ iIndicators.ResetAndDestroy();
+ iIndicators.Close();
+ }
+
+// ---------------------------------------------------------------------------
+// CCamSidePane::CCamSidePane
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CCamSidePane::CCamSidePane( CCamAppController& aController,
+ TBool aOverlayViewFinder )
+: iController( aController ),
+ iOverlayViewFinder( aOverlayViewFinder )
+ {
+ }
+
+// ---------------------------------------------------------
+// CCamSidePane::HandleControllerEventL
+// Handle an event from CCamAppController.
+// ---------------------------------------------------------
+//
+void CCamSidePane::HandleControllerEventL(
+ TCamControllerEvent aEvent, TInt /* aError */ )
+ {
+ switch ( aEvent )
+ {
+ case ECamEventFlashStateChanged:
+ {
+ if ( iIndicators[ECamIndicatorFlash]
+ && iMode != ECamControllerVideo
+ && !IsSecondaryCameraEnabled()
+ )
+ {
+ TCamFlashId flash = static_cast< TCamFlashId >
+ ( iController.IntegerSettingValue( ECamSettingItemDynamicPhotoFlash ) );
+ switch ( flash )
+ {
+ case ECamFlashAuto:
+ {
+ iIndicators[ECamIndicatorFlash]->SetIcon( 0 );
+ }
+ break;
+ case ECamFlashOff:
+ {
+ iIndicators[ECamIndicatorFlash]->SetIcon( 2 );
+ }
+ break;
+ case ECamFlashAntiRedEye:
+ {
+ iIndicators[ECamIndicatorFlash]->SetIcon( 4 );
+ }
+ break;
+ case ECamFlashForced:
+ {
+ iIndicators[ECamIndicatorFlash]->SetIcon( 6 );
+ }
+ break;
+ default:
+ break;
+ }
+ iIndicators[ECamIndicatorFlash]->SetFlashing( EFalse );
+ }
+ else
+ {
+ // empty statement to remove Lint error.
+ }
+
+ if ( iController.UiConfigManagerPtr()->IsVideoLightSupported() )
+ {
+ if ( iIndicators[ECamIndicatorVideoFlash]
+ && iMode == ECamControllerVideo
+ && !IsSecondaryCameraEnabled()
+ )
+ {
+ TCamFlashId flash = static_cast< TCamFlashId >
+ ( iController.IntegerSettingValue( ECamSettingItemDynamicVideoFlash ) );
+ switch ( flash )
+ {
+ case ECamFlashOff:
+ {
+ iIndicators[ECamIndicatorVideoFlash]->SetIcon( 0 );
+ }
+ break;
+ case ECamFlashForced:
+ {
+ iIndicators[ECamIndicatorVideoFlash]->SetIcon( 2 );
+ }
+ break;
+ default:
+ break;
+ }
+ iIndicators[ECamIndicatorVideoFlash]->SetFlashing( EFalse );
+ }
+ else
+ {
+ // empty statement to remove Lint error.
+ }
+ }
+ } // end case statement
+ break;
+ case ECamEventSceneStateChanged:
+ {
+ if ( iMode == ECamControllerVideo )
+ {
+ SetVideoSceneIndicator();
+ }
+ else
+ {
+ SetPhotoSceneIndicator();
+ }
+ }
+ break;
+
+ case ECamEventCameraChanged:
+ {
+ if ( !IsSecondaryCameraEnabled() )
+ {
+ if ( iMode == ECamControllerVideo )
+ {
+ SetVideoSceneIndicator();
+ if ( !iController.UiConfigManagerPtr()->IsVideoLightSupported() )
+ {
+ if ( iIndicators[ECamIndicatorFlash] )
+ {
+ iIndicators[ECamIndicatorFlash]->ClearIcon();
+ }
+ }
+ }
+ else
+ {
+ SetPhotoSceneIndicator();
+ if ( !iController.UiConfigManagerPtr()->IsVideoLightSupported() )
+ {
+ if ( iIndicators[ECamIndicatorFlash] )
+ {
+ iIndicators[ECamIndicatorFlash]->DisplayIcon();
+ }
+ }
+ }
+ }
+ }
+ break;
+
+#ifdef PRODUCT_USES_GENERIC_SETUP_INDICATOR
+#ifndef PRODUCT_SUPPORTS_NAVIPANE_GENERIC_SETUP_INDICATOR
+ case ECamEventSetupStateChanged:
+ {
+ SetGenericSetupIndicator();
+ }
+ break;
+#endif // !PRODUCT_SUPPORTS_NAVIPANE_GENERIC_SETUP_INDICATOR
+#endif // PRODUCT_USES_GENERIC_SETUP_INDICATOR
+
+ case ECamEventVideoStabChanged:
+ {
+ if ( iController.UiConfigManagerPtr()->IsVideoStabilizationSupported() )
+ {
+ SetVideoStabilisationIndicator();
+ }
+ break;
+ }
+
+ case ECamEventFaceTrackingStateChanged:
+ {
+ if ( iController.UiConfigManagerPtr()->IsFaceTrackingSupported() )
+ {
+ SetFaceTrackingIndicator();
+ }
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCamSidePane::IsVisible
+// Is the side pane invisible
+// -----------------------------------------------------------------------------
+//
+TBool CCamSidePane::IsVisible()
+ {
+ return iVisible;
+ }
+
+// -----------------------------------------------------------------------------
+// CCamSidePane::MakeVisible
+// Makes the side pane visible
+// -----------------------------------------------------------------------------
+//
+void CCamSidePane::MakeVisible( TBool aVisible )
+ {
+ iVisible = aVisible;
+ }
+
+// ----------------------------------------------------
+// CCamSidePane::Draw
+// Draws side pane indicators
+// ----------------------------------------------------
+//
+void CCamSidePane::Draw( CBitmapContext& aGc ) const
+ {
+ // if not overlaying the viewfinder then
+ // just clear the side pane area
+ if ( !iOverlayViewFinder )
+ {
+ aGc.Clear( iRect );
+ }
+ TInt numIndicators = iIndicators.Count();
+ TInt i;
+
+ CCamAppUi* appUi = static_cast<CCamAppUi*>( CEikonEnv::Static()->AppUi() );
+
+ if ( appUi )
+ {
+ appUi->DrawPreCaptureCourtesyUI();
+ }
+
+ for ( i = 0; i < numIndicators; i++ )
+ {
+ if ( iIndicators[i] )
+ {
+ iIndicators[i]->Draw( aGc );
+ }
+ }
+ }
+
+
+// ----------------------------------------------------
+// CCamSidePane::SetRect
+// Sets rect to draw into
+// ----------------------------------------------------
+//
+void
+CCamSidePane::SetRect( TRect& aRect )
+ {
+ iRect.SetRect( aRect.iTl, aRect.iBr );
+ }
+
+
+// ----------------------------------------------------
+// CCamSidePane::SetCaptureMode
+// Sets rect to draw into
+// ----------------------------------------------------
+//
+void
+CCamSidePane::SetCaptureMode( TCamCameraMode aMode )
+ {
+ iMode = aMode;
+ SetInitialState();
+ }
+
+// ----------------------------------------------------
+// CCamSidePane::SetInitialState
+// Notification that the burst mode has been activated/deactivated
+// ----------------------------------------------------
+//
+void CCamSidePane::SetInitialState()
+ {
+ CCamAppUiBase* appUi =
+ static_cast<CCamAppUiBase*>( CEikonEnv::Static()->AppUi() );
+
+ // set up indicator data
+ TInt numindicators = iIndicators.Count(); // number of indicators
+ // set initial state for each indicator
+ for ( TInt i = 0; i < numindicators; i++ )
+ {
+ if ( iIndicators[i] )
+ {
+ switch( i )
+ {
+ // -------------------------------------------------
+ // Scene indicator
+ case ECamIndicatorScene:
+ {
+ if( ECamControllerVideo == iMode )
+ SetVideoSceneIndicator();
+ else
+ SetPhotoSceneIndicator();
+ break;
+ }
+ // -------------------------------------------------
+ // Flash indicator
+ case ECamIndicatorFlash:
+ {
+ // don't show the icon if in video mode or the second
+ // camera is active
+ // second camera doesn't support flash
+ if ( ECamControllerVideo == iMode
+ || IsSecondaryCameraEnabled()
+ )
+ {
+ iIndicators[ECamIndicatorFlash]->ClearIcon();
+ }
+ else
+ {
+ TInt iconIndex = GetFlashIconIndex( iMode );
+ if( KErrNotFound != iconIndex )
+ {
+ iIndicators[ECamIndicatorFlash]->SetIcon( iconIndex );
+ }
+ }
+ break;
+ }
+ // -------------------------------------------------
+ // Video Flash indicator
+ case ECamIndicatorVideoFlash:
+ {
+ // don't show the icon if in video mode or the second
+ // camera is active
+ // second camera doesn't support flash
+ if ( iController.UiConfigManagerPtr()->IsVideoLightSupported() )
+ {
+ if ( ECamControllerVideo != iMode
+ || IsSecondaryCameraEnabled()
+ )
+ {
+ iIndicators[ECamIndicatorVideoFlash]->ClearIcon();
+ }
+ else
+ {
+ TInt iconIndex = GetFlashIconIndex( iMode );
+ if( KErrNotFound != iconIndex )
+ {
+ iIndicators[ECamIndicatorVideoFlash]->SetIcon( iconIndex );
+ }
+ }
+ }
+ break;
+ }
+ // -------------------------------------------------
+ // Burst mode indicator
+ case ECamIndicatorBurstMode:
+ {
+ if ( appUi && appUi->IsBurstEnabled() )
+ {
+ iIndicators[ECamIndicatorBurstMode]->SetIcon( 0 );
+ }
+ else
+ {
+ iIndicators[ECamIndicatorBurstMode]->ClearIcon();
+ }
+ break;
+ }
+ // -------------------------------------------------
+ // Self timer indicator
+ case ECamIndicatorSelfTimer:
+ {
+ iIndicators[ECamIndicatorSelfTimer]->ClearIcon();
+ break;
+ }
+ // -------------------------------------------------
+ case ECamIndicatorVideoStabiliser:
+ {
+ if ( iController.UiConfigManagerPtr()->IsVideoStabilizationSupported() )
+ {
+ SetVideoStabilisationIndicator();
+ }
+ else
+ {
+ iIndicators[ECamIndicatorVideoStabiliser]->ClearIcon();
+ }
+ break;
+ }
+ // -------------------------------------------------
+ case ECamIndicatorFaceTracking:
+ {
+ if ( iController.UiConfigManagerPtr()->IsFaceTrackingSupported() )
+ {
+ SetFaceTrackingIndicator();
+ }
+ else
+ {
+ iIndicators[ECamIndicatorFaceTracking]->ClearIcon();
+ }
+ break;
+ }
+ // -------------------------------------------------
+ case ECamIndicatorCaptureMode:
+ {
+ if( appUi && !appUi->IsSecondCameraEnabled() ||
+ appUi && appUi->IsQwerty2ndCamera() )
+ {
+ if ( ECamControllerVideo == iMode )
+ {
+ iIndicators[ECamIndicatorCaptureMode]->SetIcon( 2 );
+ }
+ else
+ iIndicators[ECamIndicatorCaptureMode]->SetIcon( 0 );
+ }
+ else
+ iIndicators[ECamIndicatorCaptureMode]->ClearIcon();
+ break;
+ }
+ // -------------------------------------------------
+ // other indicators
+ default:
+ {
+ iIndicators[i]->ClearIcon();
+ break;
+ }
+ // -------------------------------------------------
+ } // switch
+ }
+ } // for
+ }
+
+
+// ---------------------------------------------------------------------------
+// GetFlashIconIndex
+// ---------------------------------------------------------------------------
+//
+TInt
+CCamSidePane::GetFlashIconIndex( const TCamCameraMode& aMode )
+ {
+ TInt index( KErrNotFound );
+ if( ECamControllerVideo == aMode )
+ {
+ TCamFlashId flashId =
+ static_cast<TCamFlashId>(
+ iController.IntegerSettingValue( ECamSettingItemDynamicVideoFlash ) );
+ switch ( flashId )
+ {
+ case ECamFlashOff: index = 0; break;
+ case ECamFlashForced: index = 2; break;
+ default: break;
+ }
+ }
+ else
+ {
+ TCamFlashId flashId =
+ static_cast<TCamFlashId> (
+ iController.IntegerSettingValue( ECamSettingItemDynamicPhotoFlash ) );
+
+ switch ( flashId )
+ {
+ case ECamFlashAuto: index = 0; break;
+ case ECamFlashOff: index = 2; break;
+ case ECamFlashAntiRedEye: index = 4; break;
+ case ECamFlashForced: index = 6; break;
+
+ default: break;
+ }
+ }
+ return index;
+ }
+
+
+// ----------------------------------------------------
+// CCamSidePane::RegisterObserversL
+// Register with observed classes
+// ----------------------------------------------------
+//
+void CCamSidePane::RegisterObserversL()
+ {
+ CEikonEnv* eikEnv = CEikonEnv::Static();
+ CCamAppUi* appUi = static_cast<CCamAppUi*>( eikEnv->AppUi() );
+
+ if ( appUi )
+ {
+// burst mode icon is displayed in either the navipane or sidepane
+#ifndef PRODUCT_SUPPORTS_NAVIPANE_SEQUENCE
+ // Register as burst mode observer
+ appUi->AddBurstModeObserverL( this );
+#endif // !PRODUCT_SUPPORTS_NAVIPANE_SEQUENCE
+ }
+ // Register as controller observer
+ iController.AddControllerObserverL( this );
+ }
+
+// ----------------------------------------------------
+// CCamSidePane::RemoveObservers
+// Dergister with observed classes
+// ----------------------------------------------------
+//
+void CCamSidePane::RemoveObservers()
+ {
+ iController.RemoveControllerObserver( this );
+ // if shutting down then self timer will remove the observer
+ if ( !iController.IsInShutdownMode() )
+ {
+ CEikonEnv* eikEnv = CEikonEnv::Static();
+ CCamAppUi* appUi = static_cast<CCamAppUi*>( eikEnv->AppUi() );
+ if ( appUi )
+ {
+// burst mode icon is displayed in either the navipane or sidepane
+#ifndef PRODUCT_SUPPORTS_NAVIPANE_SEQUENCE
+ // Deregister as burst mode observer
+ appUi->RemoveBurstModeObserver( this );
+#endif // !PRODUCT_SUPPORTS_NAVIPANE_SEQUENCE
+ }
+ }
+ }
+
+#ifdef PRODUCT_USES_GENERIC_SETUP_INDICATOR
+#ifndef PRODUCT_SUPPORTS_NAVIPANE_GENERIC_SETUP_INDICATOR
+// ----------------------------------------------------
+// CCamSidePane::SetDefaultSetupIndicator
+// Sets the default setup indicator depending on the
+// current setup settings.
+// ----------------------------------------------------
+//
+void CCamSidePane::SetGenericSetupIndicator()
+ {
+ if ( iIndicators[ECamIndicatorGenericSetup] )
+ {
+ // If the current mode is video and the video setup settings
+ // are generic to the current video scene then do not show
+ // the generic setup tampered indicator.
+ if ( ( iMode == ECamControllerVideo ) &&
+ ( iController.VideoSceneDefaultsAreSet() ) )
+ {
+ iIndicators[ECamIndicatorGenericSetup]->ClearIcon();
+ }
+ // Otherwise, if the current mode is photo and the photo setup settings
+ // are generic to the current photo scene then do not show
+ // the generic setup tampered indicator.
+ else if ( ( iMode != ECamControllerVideo ) &&
+ ( iController.PhotoSceneDefaultsAreSet() ) )
+ {
+ iIndicators[ECamIndicatorGenericSetup]->ClearIcon();
+ }
+ // Otherwise do not show the indicator.
+ else
+ {
+ iIndicators[ECamIndicatorGenericSetup]->SetIcon( 0 );
+ }
+ }
+ }
+#endif // !PRODUCT_SUPPORTS_NAVIPANE_GENERIC_SETUP_INDICATOR
+#endif // PRODUCT_USES_GENERIC_SETUP_INDICATOR
+
+
+// ----------------------------------------------------
+// CCamSidePane::SetVideoStabilisationIndicator
+// Sets the image stabilisation indicator for video capture mode
+// ----------------------------------------------------
+//
+void CCamSidePane::SetVideoStabilisationIndicator()
+ {
+ if ( iController.UiConfigManagerPtr()->IsVideoStabilizationSupported() )
+ {
+ if ( iIndicators[ECamIndicatorVideoStabiliser] )
+ {
+ TCamSettingsOnOff stabilisation = static_cast< TCamSettingsOnOff >
+ ( iController.IntegerSettingValue( ECamSettingItemVideoStab ) );
+
+ // If the current mode is video
+ if ( stabilisation == ECamSettOn &&
+ iMode == ECamControllerVideo &&
+ !IsSecondaryCameraEnabled() )
+ {
+ iIndicators[ECamIndicatorVideoStabiliser]->SetIcon( 0 );
+ }
+ // Otherwise, draw nothing.
+ else
+ {
+ iIndicators[ECamIndicatorVideoStabiliser]->ClearIcon();
+ }
+ }
+ }
+ }
+
+// ----------------------------------------------------
+// CCamSidePane::SetFaceTrackingIndicator
+// Sets the facetracking indicator for video capture mode
+// ----------------------------------------------------
+//
+void CCamSidePane::SetFaceTrackingIndicator()
+ {
+ if ( iController.UiConfigManagerPtr()->IsFaceTrackingSupported() )
+ {
+ if ( iIndicators[ECamIndicatorFaceTracking] )
+ {
+ TCamSettingsOnOff facetracking = static_cast< TCamSettingsOnOff >
+ ( iController.IntegerSettingValue( ECamSettingItemFaceTracking ) );
+
+ // If the current mode is still image
+ if ( facetracking == ECamSettOn && iMode == ECamControllerImage && !IsSecondaryCameraEnabled() )
+ {
+ iIndicators[ECamIndicatorFaceTracking]->SetIcon( 0 );
+ }
+ // Otherwise, draw nothing.
+ else
+ {
+ iIndicators[ECamIndicatorFaceTracking]->ClearIcon();
+ }
+ }
+ }
+ }
+
+// ----------------------------------------------------
+// CCamSidePane::SetVideoSceneIndicator
+// Set the scene indicator depending on the current video scene setting
+// ----------------------------------------------------
+//
+void CCamSidePane::SetVideoSceneIndicator()
+ {
+ if ( iIndicators[ECamIndicatorScene] )
+ {
+ TCamSceneId scene = static_cast< TCamSceneId > (
+ iController.IntegerSettingValue( ECamSettingItemDynamicVideoScene ) );
+ switch ( scene )
+ {
+ case ECamSceneNormal:
+ {
+ iIndicators[ECamIndicatorScene]->SetIcon( 0 );
+ }
+ break;
+ case ECamSceneNight:
+ {
+ iIndicators[ECamIndicatorScene]->SetIcon( 2 );
+ }
+ break;
+ case ECamSceneUser:
+ {
+ iIndicators[ECamIndicatorScene]->SetIcon( 4 );
+ }
+ break;
+ default:
+ {
+ iIndicators[ECamIndicatorScene]->ClearIcon();
+ }
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------
+// CCamSidePane::SetPhotoSceneIndicator
+// Set the scene indicator depending on the current photo scene setting
+// ----------------------------------------------------
+//
+void CCamSidePane::SetPhotoSceneIndicator()
+ {
+ if ( iIndicators[ECamIndicatorScene] )
+ {
+ TCamSceneId scene = static_cast< TCamSceneId > (
+ iController.IntegerSettingValue( ECamSettingItemDynamicPhotoScene ) );
+ switch ( scene )
+ {
+ case ECamSceneAuto:
+ {
+ iIndicators[ECamIndicatorScene]->SetIcon( 4 );
+ }
+ break;
+ case ECamSceneUser:
+ {
+ iIndicators[ECamIndicatorScene]->SetIcon( 6 );
+ }
+ break;
+ case ECamSceneMacro:
+ {
+ iIndicators[ECamIndicatorScene]->SetIcon( 8 );
+ }
+ break;
+ case ECamScenePortrait:
+ {
+ iIndicators[ECamIndicatorScene]->SetIcon( 10 );
+ }
+ break;
+ case ECamSceneScenery:
+ {
+ iIndicators[ECamIndicatorScene]->SetIcon( 12 );
+ }
+ break;
+ case ECamSceneNight:
+ {
+ iIndicators[ECamIndicatorScene]->SetIcon( 14 );
+ }
+ break;
+ case ECamSceneSports:
+ {
+ iIndicators[ECamIndicatorScene]->SetIcon( 16 );
+ }
+ break;
+ case ECamSceneNightScenery:
+ {
+ iIndicators[ECamIndicatorScene]->SetIcon( 22 );
+ }
+ break;
+ case ECamSceneNightPortrait:
+ {
+ iIndicators[ECamIndicatorScene]->SetIcon( 24 );
+ }
+ break;
+ case ECamSceneCandlelight:
+ {
+ iIndicators[ECamIndicatorScene]->SetIcon( 26 );
+ }
+ break;
+ default:
+ {
+ iIndicators[ECamIndicatorScene]->ClearIcon();
+ }
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------
+// CCamSidePane::BurstModeActiveL
+// Notification that the burst mode has been activated/deactivated
+// ----------------------------------------------------
+//
+// Burst mode icon is displayed in either the navipane or sidepane
+#ifndef PRODUCT_SUPPORTS_NAVIPANE_SEQUENCE
+void CCamSidePane::BurstModeActiveL( TBool aActive, TBool /*aStillModeActive*/ )
+ {
+ if ( iIndicators[ECamIndicatorBurstMode] )
+ {
+ // If burst mode has been activated
+ if ( aActive )
+ {
+ iIndicators[ECamIndicatorBurstMode]->SetIcon( 0 );
+ }
+ else // otherwise, burst mode has been deactivated
+ {
+ iIndicators[ECamIndicatorBurstMode]->ClearIcon();
+ }
+ }
+ }
+#endif // !PRODUCT_SUPPORTS_NAVIPANE_SEQUENCE
+
+// ----------------------------------------------------
+// CCamSidePane::IsSecondaryCameraEnabled
+// Checks if the secondary camera is enabled
+// ----------------------------------------------------
+//
+TBool CCamSidePane::IsSecondaryCameraEnabled() const
+ {
+ return static_cast<CCamAppUiBase*>(
+ CEikonEnv::Static()->AppUi() )->IsSecondCameraEnabled();
+ }
+
+// ----------------------------------------------------
+// CCamSidePane::UpdateLayout
+// ----------------------------------------------------
+//
+void CCamSidePane::UpdateLayout()
+ {
+ if ( CamUtility::IsNhdDevice() )
+ {
+ TouchLayout();
+ }
+ else
+ {
+ NonTouchLayout();
+ }
+ }
+
+// ----------------------------------------------------
+// CCamSidePane::NonTouchLayout
+// ----------------------------------------------------
+void CCamSidePane::NonTouchLayout() const
+ {
+ TRect rect;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, rect );
+ TInt cba = AknLayoutUtils::CbaLocation() ==
+ AknLayoutUtils::EAknCbaLocationLeft;
+ TAknLayoutRect parent;
+ parent.LayoutRect( rect, AknLayoutScalable_Apps::cam6_mode_pane( cba ) );
+
+ // update coords for each indicator
+ for ( TInt i = 0; i < iIndicators.Count(); i++ )
+ {
+ TAknLayoutRect l;
+ if ( iIndicators[i] )
+ {
+ switch ( i )
+ {
+ case ECamIndicatorCaptureMode:
+ {
+ l.LayoutRect( parent.Rect(),
+ AknLayoutScalable_Apps::cam6_mode_pane_g1( cba ) );
+ iIndicators[i]->SetRect( l.Rect() );
+ break;
+ }
+ case ECamIndicatorBurstMode:
+ {
+ l.LayoutRect( parent.Rect(),
+ AknLayoutScalable_Apps::cam6_mode_pane_g2( cba ) );
+ iIndicators[i]->SetRect( l.Rect() );
+ break;
+ }
+ case ECamIndicatorImageShakeWarning:
+ {
+ l.LayoutRect( parent.Rect(),
+ AknLayoutScalable_Apps::cam6_mode_pane_g3( cba ) );
+ iIndicators[i]->SetRect( l.Rect() );
+ break;
+ }
+ case ECamIndicatorVideoStabiliser:
+ {
+ l.LayoutRect( parent.Rect(),
+ AknLayoutScalable_Apps::cam6_mode_pane_g3( cba ) );
+ iIndicators[i]->SetRect( l.Rect() );
+ break;
+ }
+ case ECamIndicatorFaceTracking:
+ {
+ l.LayoutRect( parent.Rect(),
+ AknLayoutScalable_Apps::cam6_mode_pane_g4( cba ) );
+ iIndicators[i]->SetRect( l.Rect() );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCamSidePane::TouchLayout
+// ---------------------------------------------------------------------------
+void CCamSidePane::TouchLayout() const
+ {
+ TSize screenSize;
+ AknLayoutUtils::LayoutMetricsSize( AknLayoutUtils::EScreen, screenSize );
+ TRect rect( TPoint(), screenSize );
+ TInt variant = Layout_Meta_Data::IsLandscapeOrientation();
+
+ // update coords for each indicator
+ for ( TInt i = 0; i < iIndicators.Count(); i++ )
+ {
+ TAknLayoutRect l;
+ if ( iIndicators[i] )
+ {
+ switch ( i )
+ {
+ case ECamIndicatorCaptureMode:
+ {
+ l.LayoutRect( rect,
+ AknLayoutScalable_Apps::main_camera4_pane_g1( variant ) );
+ iIndicators[i]->SetRect( l.Rect() );
+ break;
+ }
+ case ECamIndicatorBurstMode:
+ {
+ l.LayoutRect( rect,
+ AknLayoutScalable_Apps::main_camera4_pane_g2( variant ) );
+ iIndicators[i]->SetRect( l.Rect() );
+ break;
+ }
+ case ECamIndicatorImageShakeWarning:
+ {
+ l.LayoutRect( rect,
+ AknLayoutScalable_Apps::main_camera4_pane_g3( variant ) );
+ iIndicators[i]->SetRect( l.Rect() );
+ break;
+ }
+ case ECamIndicatorVideoStabiliser:
+ {
+ l.LayoutRect( rect,
+ AknLayoutScalable_Apps::main_video4_pane_g5( variant ) );
+ iIndicators[i]->SetRect( l.Rect() );
+ break;
+ }
+ case ECamIndicatorFaceTracking:
+ {
+ l.LayoutRect( rect,
+ AknLayoutScalable_Apps::main_camera4_pane_g6( variant ) );
+ iIndicators[i]->SetRect( l.Rect() );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+ }
+ }
+
+// End of File