diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraapp/generic/src/CamNaviProgressBarModel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/src/CamNaviProgressBarModel.cpp Wed Sep 01 12:30:54 2010 +0100 @@ -0,0 +1,820 @@ +/* +* 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: Control for displaying elapse/remaining record time +* in Navi Pane +* +* Copyright (c) 2007-2008 Nokia. All rights reserved. +* This material, including documentation and any related computer +* programs, is protected by copyright controlled by Nokia. All +* rights are reserved. Copying, including reproducing, storing, +* adapting or translating, any or all of this material requires the +* prior written consent of Nokia. This material also contains +* confidential information which may not be disclosed to others +* without the prior written consent of Nokia. + +* +* +*/ + + +// INCLUDE FILES +#include +#include +#include // For CEikApplication +#include +#include +#include +#include // StringLoader +#include +#include // TResourceReader +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "CamNaviProgressBarModel.h" +#include "CamAppUi.h" +#include "CamLogger.h" +#include "CamUtility.h" +#include "CamDecorator.h" +#include "CamObserverHandler.h" +#include "camcameraevents.h" +#include "camcameracontrollertypes.h" +#include "camtextitem.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "CamNaviProgressBarModelTraces.h" +#endif + + +// CONSTANTS +const TInt KFlashInterval = 200000; +const TUint KCameraEventInterest = ECamCameraEventClassVideoTimes; + +// ========================= MEMBER FUNCTIONS ================================ + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::NewL +// Factory construction function +// --------------------------------------------------------- +// +CCamNaviProgressBarModel* CCamNaviProgressBarModel::NewL( CCamAppController& aController ) + { + CCamNaviProgressBarModel* self = new( ELeave ) CCamNaviProgressBarModel( aController ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::~CCamNaviProgressBarModel +// Destructor +// --------------------------------------------------------- +// +CCamNaviProgressBarModel::~CCamNaviProgressBarModel() + { + PRINT( _L("Camera => ~CCamNaviProgressBarModel") ); + + delete iElapsedTimeTextItem; + delete iRemainingTimeTextItem; + + UnloadResourceData(); + + iController.RemoveControllerObserver( this ); + iController.RemoveCameraObserver( this ); + + delete iTimeFormat; + delete iObserverHandler; + + if ( iFlashingTimer && iFlashingTimer->IsActive() ) + { + iFlashingTimer->Cancel(); + } + delete iFlashingTimer; + PRINT( _L("Camera <= ~CCamNaviProgressBarModel") ); + } + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::CCamNaviProgressBarModel +// C++ constructor +// --------------------------------------------------------- +// +CCamNaviProgressBarModel::CCamNaviProgressBarModel( + CCamAppController& aController ) +: iController( aController ) + { + } + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::DrawProgressBar +// Draw Navi-progress +// --------------------------------------------------------- +// +void +CCamNaviProgressBarModel::DrawProgressBar( CBitmapContext& aGc, + const CCoeControl* aControl ) const + { + DrawProgBar( aGc, aControl ); + } + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::ConstructL +// Symbian OS 2nd phase constructor +// --------------------------------------------------------- +// +void CCamNaviProgressBarModel::ConstructL() + { + OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, CCAMNAVIPROGRESSBARMODEL_CONSTRUCTL, "e_CCamNaviProgressBarModel_ConstructL 1" ); + iController.AddControllerObserverL( this ); + iController.AddCameraObserverL( this, KCameraEventInterest ); + + LoadResourceDataL(); + + iObserverHandler = CCamObserverHandler::NewL(); + + iFlashingTimer = CPeriodic::NewL( CActive::EPriorityStandard ); + OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP1_CCAMNAVIPROGRESSBARMODEL_CONSTRUCTL, "e_CCamNaviProgressBarModel_ConstructL 0" ); + } + +// ----------------------------------------------------------------------------- +// CCamNaviProgressBarModel::LoadResourceDataL() +// Reads in all information needed from resources +// ----------------------------------------------------------------------------- +// +void CCamNaviProgressBarModel::LoadResourceDataL() + { + OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, CCAMNAVIPROGRESSBARMODEL_LOADRESOURCEDATAL, "e_CCamNaviProgressBarModel_LoadResourceDataL 1" ); + // Create component bitmaps + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + TFileName resFileName; + CamUtility::ResourceFileName( resFileName ); + TPtrC resname = resFileName; + + AknsUtils::CreateIconL( + skin, + KAknsIIDQgnGrafMup2BarProgress, + iProgressBarBitmap, + iProgressBarMask, + resname, + EMbmCameraappQgn_graf_mup2_bar_progress, + EMbmCameraappQgn_graf_mup2_bar_progress_mask ); + + AknsUtils::CreateIconL( + skin, + KAknsIIDQgnGrafMup2BarFrame, + iProgressBarFrame, + resname, + EMbmCameraappQgn_graf_mup2_bar_frame ); + + delete iElapsedTimeTextItem; + iElapsedTimeTextItem = NULL; + CCamAppUi* appUi = static_cast( CEikonEnv::Static()->AppUi() ); + iElapsedTimeTextItem = CCamTextItem::NewL(); + + delete iRemainingTimeTextItem; + iRemainingTimeTextItem = NULL; + iRemainingTimeTextItem = CCamTextItem::NewL(); + + iCamOrientation = appUi->CamOrientation(); + + if ( CamUtility::IsNhdDevice() ) + { + TouchLayoutL(); + } + else + { + if ( ECamOrientationPortrait == appUi->CamOrientation() ) + { + NonTouchLayoutSecondaryL(); + } + else + { + NonTouchLayoutL(); + } + } + + // Read the time format resource + // We have to free the memory first if it has been + // allocated already + if ( iTimeFormat ) + { + delete iTimeFormat; + iTimeFormat = NULL; + } + if ( ECamOrientationPortrait == appUi->CamOrientation() ) + { + iTimeFormat = CEikonEnv::Static()->AllocReadResourceL( R_QTN_TIME_DURAT_MIN_SEC_WITH_ZERO ); + } + else + { + iTimeFormat = CEikonEnv::Static()->AllocReadResourceL( R_QTN_TIME_DURAT_LONG ); + } + + TBool progressBarVisible = ETrue; + + if ( progressBarVisible ) + { + iDecorator = CCamDecorator::NewL( iController, + ROID(R_CAM_VIDEO_CAP_LIMIT_RECORDING_ICON_ID), this ); + } + else + { + iDecorator = CCamDecorator::NewL( iController, + ROID(R_CAM_VIDEO_CAP_UNLIMIT_RECORDING_ICON_ID), this ); + } + + AknIconUtils::SetSize( + iProgressBarBitmap, + iProgressBarRect.Rect().Size(), + EAspectRatioNotPreserved ); + + // Progress bar area background + AknIconUtils::SetSize( + iProgressBarFrame, + iProgressBarRect.Rect().Size(), + EAspectRatioNotPreserved); + + // Create component bitmaps + TSize size; + if ( CamUtility::IsNhdDevice() ) + { + size = iProgressIconRect.Rect().Size(); + } + else + { + size = iVidStorageIconRect.Rect().Size(); + } + TCamOrientation orientation = appUi->CamOrientation(); + AknIconUtils::CreateIconL( iPhoneIcon, + iPhoneIconMask, + resname, + EMbmCameraappQgn_indi_cam4_memory_phone, + EMbmCameraappQgn_indi_cam4_memory_phone_mask ); + AknIconUtils::SetSize( iPhoneIcon, size ); + + AknIconUtils::CreateIconL( iMMCIcon, + iMMCIconMask, + resname, + EMbmCameraappQgn_indi_cam4_memory_mmc, + EMbmCameraappQgn_indi_cam4_memory_mmc_mask ); + AknIconUtils::SetSize( iMMCIcon, size ); + + AknIconUtils::CreateIconL( iMassStorageIcon, + iMassStorageIconMask, + resname, + EMbmCameraappQgn_indi_cam4_memory_mass, + EMbmCameraappQgn_indi_cam4_memory_mass_mask ); + + + AknIconUtils::SetSize( iMassStorageIcon, size ); + OstTrace0( CAMERAAPP_PERFORMANCE_DETAIL, DUP1_CCAMNAVIPROGRESSBARMODEL_LOADRESOURCEDATAL, "e_CCamNaviProgressBarModel_LoadResourceDataL 0" ); + } + +// ----------------------------------------------------------------------------- +// CCamNaviProgressBarModel::UnloadResourceData() +// Frees all dynamic resources allocated in LoadResourceDataL +// ----------------------------------------------------------------------------- +// +void CCamNaviProgressBarModel::UnloadResourceData() + { + delete iDecorator; + iDecorator = NULL; + + delete iPhoneIcon; + iPhoneIcon = NULL; + delete iPhoneIconMask; + iPhoneIconMask = NULL; + delete iMMCIcon; + iMMCIcon = NULL; + delete iMMCIconMask; + iMMCIconMask = NULL; + delete iMassStorageIcon; + iMassStorageIcon = NULL; + delete iMassStorageIconMask; + iMassStorageIconMask = NULL; + delete iProgressBarBitmap; + iProgressBarBitmap = NULL; + delete iProgressBarMask; + iProgressBarMask = NULL; + delete iProgressBarFrame; + iProgressBarFrame = NULL; + } + +// ----------------------------------------------------------------------------- +// CCamNaviProgressBarModel::ReloadResourceDataL() +// Refreshes all resource-based information stored in the class +// ----------------------------------------------------------------------------- +// +void CCamNaviProgressBarModel::ReloadResourceDataL() + { + UnloadResourceData(); + LoadResourceDataL(); + } + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::DrawProgBar +// Draw the control +// --------------------------------------------------------- +// +void +CCamNaviProgressBarModel::DrawProgBar( CBitmapContext& aGc, + const CCoeControl* /*aControl*/ ) const + { + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + iDecorator->Draw( aGc, iExtent ); + + CFbsBitmap* icon = NULL; + CFbsBitmap* mask = NULL; + switch( iStorageLocation ) + { + case ECamMediaStoragePhone: + { + icon = iPhoneIcon; + mask = iPhoneIconMask; + } + break; + case ECamMediaStorageMassStorage: + { + icon = iMassStorageIcon; + mask = iMassStorageIconMask; + } + break; + case ECamMediaStorageCard: + { + icon = iMMCIcon; + mask = iMMCIconMask; + } + break; + case ECamMediaStorageNone: + default: + { + //TODO: Get icons when none is available + } + break; + } + + DrawElapsedTimeText( aGc ); + DrawRemainingTimeText( aGc, skin ); + if ( CamUtility::IsNhdDevice() ) + { + aGc.BitBltMasked( iProgressIconRect.Rect().iTl, + icon, icon->SizeInPixels(), mask, ETrue ); + } + else + { + aGc.BitBltMasked( iVidStorageIconRect.Rect().iTl, + icon, icon->SizeInPixels(), mask, ETrue ); + } + + DrawProgressBar( aGc ); + } + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::HandleControllerEventL +// Handle an event from CCamAppController. +// --------------------------------------------------------- +// +void CCamNaviProgressBarModel::HandleControllerEventL( + TCamControllerEvent aEvent, TInt /* aError */ ) + { + PRINT( _L("Camera => CCamNaviProgressBarModel::HandleControllerEventL")) + + switch( aEvent ) + { + // --------------------------------------------------- + /* Get it from CCameraController now. + // if this is a record counter update event + case ECamEventCounterUpdated: + { + PRINT( _L("Camera => CCamNaviProgressBarModel::HandleControllerEventL update")) + iRecordTimeElapsed = iController.RecordTimeElapsed(); + iRecordTimeRemaining = iController.RecordTimeRemaining(); + FormatTimeL(); + BroadcastEvent( ECamObserverEventNaviModelUpdated ); + + // See if we need to start blinking the elapsed time + TTime time( iRecordTimeElapsed.Int64() ); + TDateTime recordTime = time.DateTime(); + + if ( recordTime.Minute() != 0 && + recordTime.Second() == 0 && + !iFlashingTimer->IsActive() ) + { + iFlashingTimer->Start( KFlashInterval, + KFlashInterval, + TCallBack( FlashCallBack, this ) ); + } + break; + } + */ + // --------------------------------------------------- + case ECamEventEngineStateChanged: + { +// +// if ( iController.EngineState() == ECamEngineVideoCapturePrepared ) + if ( ECamCameraPreparedVideo == iController.CameraState() ) + { + iRecordTimeRemaining = iController.RecordTimeRemaining(); + FormatTimeL(); + BroadcastEvent( ECamObserverEventNaviModelUpdated ); + } + else + { + // empty statement to remove Lint error + } + break; + } + // --------------------------------------------------- + case ECamEventOperationStateChanged: + { + if ( ECamControllerVideo == iController.CurrentMode() + && ECamCapturing == iController.CurrentOperation() ) + { + // get the current media storage + iStorageLocation = static_cast< TCamMediaStorage > + ( iController.IntegerSettingValue( ECamSettingItemVideoMediaStorage ) ); + } + else + { + // empty statement to remove Lint error + } + break; + } + // --------------------------------------------------- + case ECamEventRecordComplete: + { + // reset elapsed recording time + iController.RecordTimeElapsed( iRecordTimeElapsed ); + iRecordTimeElapsed = static_cast(0); + iFlashingTimer->Cancel(); + iFlash = EFalse; + break; + } + // --------------------------------------------------- + default: + { + break; + } + // --------------------------------------------------- + } + PRINT( _L("Camera <= CCamNaviProgressBarModel::HandleControllerEventL")) + } + +// ----------------------------------------------------------------------------- +// HandleCameraEventL +// +// ----------------------------------------------------------------------------- +// +void +CCamNaviProgressBarModel +::HandleCameraEventL( TInt /*aStatus*/, + TCamCameraEventId aEventId, + TAny* aEventData /*= NULL*/ ) + { + PRINT( _L("Camera => CCamNaviProgressBarModel::HandleCameraEventL") ); + switch( aEventId ) + { + // --------------------------------------------------- + case ECamCameraEventVideoTimes: + { + TCamVideoRecordingTimes* times = + static_cast( aEventData ); + if( times ) + { + iRecordTimeElapsed = times->iTimeElapsed; + iRecordTimeRemaining = times->iTimeRemaining; + + // If the time we have is greater than the maximum allowed, return the + // maximum + TTimeIntervalMicroSeconds maxRecordingLength( static_cast(KMaxRecordingLength) ); + + if( iRecordTimeRemaining > maxRecordingLength ) + { + iRecordTimeRemaining = maxRecordingLength; + } + + FormatTimeL(); + BroadcastEvent( ECamObserverEventNaviModelUpdated ); + + // See if we need to start blinking the elapsed time + TTime time( iRecordTimeElapsed.Int64() ); + TDateTime recordTime = time.DateTime(); + + if ( recordTime.Minute() != 0 + && recordTime.Second() == 0 + && !iFlashingTimer->IsActive() ) + { + iFlashingTimer->Start( KFlashInterval, + KFlashInterval, + TCallBack( FlashCallBack, this ) ); + } + } + break; + } + // --------------------------------------------------- + default: + break; + // --------------------------------------------------- + } + PRINT( _L("Camera <= CCamNaviProgressBarModel::HandleCameraEventL") ); + } + + +// ----------------------------------------------------------------------------- +// CCamNaviProgressBarModel::FormatTimeL +// Formats the elapsed/remaining record time +// ----------------------------------------------------------------------------- +// +void CCamNaviProgressBarModel::FormatTimeL() + { + TTime time( iRecordTimeElapsed.Int64() ); + time.FormatL( iElapsedTimeText, *iTimeFormat ); + + time = iRecordTimeRemaining.Int64(); + time.FormatL( iRemainingTimeText, *iTimeFormat ); + + if ( iElapsedTimeTextItem ) + { + iElapsedTimeTextItem->SetTextL( iElapsedTimeText ); + } + + if ( iRemainingTimeTextItem ) + { + iRemainingTimeTextItem->SetTextL( iRemainingTimeText ); + } + } + +// ----------------------------------------------------------------------------- +// CCamNaviProgressBarModel::DrawElapsedTimeText +// Draws the elapsed record time to the navi pane +// ----------------------------------------------------------------------------- +// +void +CCamNaviProgressBarModel::DrawElapsedTimeText( CBitmapContext& aGc ) const + { + if ( !iFlash && iElapsedTimeTextItem ) + { + iElapsedTimeTextItem->Draw( aGc ); + } + } + +// ----------------------------------------------------------------------------- +// CCamNaviProgressBarModel::DrawRemainingTimeText +// Draws the remaining record time to the navi pane +// ----------------------------------------------------------------------------- +// +void +CCamNaviProgressBarModel::DrawRemainingTimeText( CBitmapContext& aGc, + MAknsSkinInstance* /*aSkin*/ ) const + { + if ( iRemainingTimeTextItem ) + { + iRemainingTimeTextItem->Draw( aGc ); + } + } + +// ----------------------------------------------------------------------------- +// CCamNaviProgressBarModel::DrawProgressBar +// Draws the progress bar to the navi pane +// ----------------------------------------------------------------------------- +// +void +CCamNaviProgressBarModel::DrawProgressBar( CBitmapContext& aGc ) const + { + PRINT( _L("Camera => CCamNaviProgressBarModel::DrawProgressBar")) + + // Draw frame + TRect rect = iProgressBarRect.Rect(); + + aGc.BitBlt( rect.iTl, iProgressBarFrame ); + + // Draw the progress bar + + // Define the area of bitmap that is to be drawn + TRect srcRect( 0, 0, 0, iProgressBarBitmap->SizeInPixels().iHeight ); + TInt newWidth = rect.Width(); + + // If remaining record time is zero, do not try to perform the percentage + // calculation, the progress bar will be full + if ( iRecordTimeRemaining.Int64() > 0 ) + { + newWidth = static_cast(( iRecordTimeElapsed.Int64() * rect.Width() ) + / ( iRecordTimeElapsed.Int64() + iRecordTimeRemaining.Int64() )); + } + else + { + // empty statement to remove Lint error. + } + + srcRect.SetWidth( newWidth ); + + aGc.BitBltMasked( rect.iTl, iProgressBarBitmap, srcRect, iProgressBarMask, ETrue ); + } + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::SetExtentL +// Sets the extent +// --------------------------------------------------------- +// +void CCamNaviProgressBarModel::SetExtentL( const TRect& aExtent ) + { + iExtent = aExtent; + } + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::RegisterObserverL +// Registers an observer +// --------------------------------------------------------- +// +void CCamNaviProgressBarModel::RegisterObserverL(MCamObserver* aObserver) + { + iObserverHandler->RegisterObserverL(aObserver); + } + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::DeregisterObserver +// Deregisters an observer +// --------------------------------------------------------- +// +void CCamNaviProgressBarModel::DeregisterObserver(MCamObserver* aObserver) + { + iObserverHandler->DeregisterObserver(aObserver); + } + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::BroadcastEvent +// Broadcasts an event to all observers +// --------------------------------------------------------- +// +void CCamNaviProgressBarModel::BroadcastEvent(TCamObserverEvent aEvent) + { + iObserverHandler->BroadcastEvent(aEvent); + } + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::HandleObservedEvent +// Handles observed events +// --------------------------------------------------------- +// +void CCamNaviProgressBarModel::HandleObservedEvent(TCamObserverEvent aEvent) + { + if( aEvent == ECamObserverEventRecordingIconUpdated ) + { + BroadcastEvent(ECamObserverEventNaviModelUpdated); + } + } + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::DoCancel +// Called when the flashing timer elapses +// --------------------------------------------------------- +// +TInt CCamNaviProgressBarModel::FlashCallBack( TAny* aAny ) + { + CCamNaviProgressBarModel* self = static_cast( aAny ); + TTime time( self->iRecordTimeElapsed.Int64() ); + TDateTime recordTime = time.DateTime(); + if ( recordTime.Second() != 0 ) + { + self->iFlashingTimer->Cancel(); + self->iFlash = EFalse; + } + else + { + self->iFlash = !self->iFlash; + self->BroadcastEvent( ECamObserverEventNaviModelUpdated ); + } + return KErrNone; + } + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::TouchLayoutL +// --------------------------------------------------------- +void CCamNaviProgressBarModel::TouchLayoutL() + { + TInt variant = 0; // portrait + TInt iconVariant = 1; + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + variant = 1; // landscape + iconVariant = 0; + } + + TAknLayoutRect progressPaneLayout; + progressPaneLayout.LayoutRect( iExtent, + AknLayoutScalable_Apps::vid4_progress_pane( variant ) ); + + TRect progressPaneRect = progressPaneLayout.Rect(); + iElapsedTimeTextItem->SetLayoutL( progressPaneRect, + AknLayoutScalable_Apps::vid4_progress_pane_t1( iconVariant ) ); + iRemainingTimeTextItem->SetLayoutL( progressPaneRect, + AknLayoutScalable_Apps::vid4_progress_pane_t2( iconVariant ) ); + iProgressIconRect.LayoutRect( progressPaneRect, + AknLayoutScalable_Apps::vid4_progress_pane_g4( iconVariant ) ); + + // Progress bar + iProgressBarRect.LayoutRect( progressPaneRect, + AknLayoutScalable_Apps::wait_bar_pane_cp07( iconVariant ) ); + + // Minimum progress pane rect for drawing while recording + iProgPaneRect = iRemainingTimeTextItem->Rect(); + iProgPaneRect.BoundingRect( iElapsedTimeTextItem->Rect() ); + iProgPaneRect.BoundingRect( iProgressIconRect.Rect() ); + iProgPaneRect.BoundingRect( iProgressBarRect.Rect() ); + } + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::NonTouchLayoutL +// Read nontouch layout for primary camera +// --------------------------------------------------------- +void CCamNaviProgressBarModel::NonTouchLayoutL() + { + TInt variant = 0; // Magic: layout Opt1 + + TInt cba = 1; // Magic: layout Opt1 + + TAknLayoutRect progressPaneLayout; + + progressPaneLayout.LayoutRect( iExtent, + AknLayoutScalable_Apps::vid6_indi_pane( variant ) ); + TRect progressPaneRect = progressPaneLayout.Rect(); + + iVidStorageIconRect.LayoutRect( progressPaneRect, + AknLayoutScalable_Apps::vid6_indi_pane_g3( cba ) ); + iElapsedTimeTextItem->SetLayoutL( progressPaneRect, + AknLayoutScalable_Apps::vid6_indi_pane_t2( cba ) ); + iRemainingTimeTextItem->SetLayoutL( progressPaneRect, + AknLayoutScalable_Apps::vid6_indi_pane_t3( cba ) ); + iProgressIconRect.LayoutRect( progressPaneRect, + AknLayoutScalable_Apps::wait_bar_pane_cp08( 0 ) ); + + // Progress bar + iProgressBarRect.LayoutRect( progressPaneRect, + AknLayoutScalable_Apps::wait_bar_pane_cp08( 0 ) ); + + // Minimum progress pane rect for drawing while recording + iProgPaneRect = iRemainingTimeTextItem->Rect(); + iProgPaneRect.BoundingRect( iElapsedTimeTextItem->Rect() ); + iProgPaneRect.BoundingRect( iProgressIconRect.Rect() ); + iProgPaneRect.BoundingRect( iProgressBarRect.Rect() ); + } + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::NonTouchLayoutSecondaryL +// Read nontouch layout for secondary camera +// --------------------------------------------------------- +void CCamNaviProgressBarModel::NonTouchLayoutSecondaryL() + { + TRect screenRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, screenRect ); + iExtent = screenRect; + // Magic numbers used for layout variation + TAknLayoutRect progressPaneLayout; + progressPaneLayout.LayoutRect( iExtent, + AknLayoutScalable_Apps::vid6_indi_pane( 3 ) ); + + iVidStorageIconRect.LayoutRect( progressPaneLayout.Rect(), + AknLayoutScalable_Apps::vid6_indi_pane_g3( 3 ) ); + + TRect progressPaneRect = progressPaneLayout.Rect(); + iElapsedTimeTextItem->SetLayoutL( progressPaneRect, + AknLayoutScalable_Apps::vid6_indi_pane_t2( 2 ) ); + iRemainingTimeTextItem->SetLayoutL( progressPaneRect, + AknLayoutScalable_Apps::vid6_indi_pane_t3( 2 ) ); + iProgressIconRect.LayoutRect( progressPaneRect, + AknLayoutScalable_Apps::wait_bar_pane_cp08( 1 ) ); + + // Progress bar + iProgressBarRect.LayoutRect( progressPaneRect, + AknLayoutScalable_Apps::wait_bar_pane_cp08( 1 ) ); + } + +// --------------------------------------------------------- +// CCamNaviProgressBarModel::ProgPaneRect +// +// --------------------------------------------------------- +TRect CCamNaviProgressBarModel::ProgPaneRect() + { + return iProgPaneRect; + } + +// End of File