diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraapp/generic/GsCamcorderPlugin/src/GSCamQualitySettingSlider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/GsCamcorderPlugin/src/GSCamQualitySettingSlider.cpp Wed Sep 01 12:30:54 2010 +0100 @@ -0,0 +1,1068 @@ +/* +* 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: Class for showing quality slider* +*/ + + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include // For CCoeAppUiBase +#include // For CEikApplication +#include // resource reader +#include +#include +#include +#include +#include "GSCamQualitySettingSlider.h" +#include "CamPanic.h" // Panic codes +#include "CamUtility.h" +#include "CamPSI.h" + +#include "camconfiguration.h" + +// CONSTANTS + +const TInt KDivisorFactor = 1024; // Avoids using TReal maths, use factor of 2 + +const TInt KMinQuality = 0; +const TInt KMaxBackCameraPhotoQuality = 4; // Can be 3 or 5 steps => 2 or 4 +const TInt KMaxBackCameraVideoQuality = 4; + +// Image quality value indexes +const TInt KImageQualityHigh = 0; +const TInt KImageQualityMedium = 1; +const TInt KImageQualityLow = 2; +const TInt KImageQualityLower = 3; +const TInt KImageQualityLowest = 4; + +// Video quality value indexes +const TInt KVideoQualityTVHigh = 0; +const TInt KVideoQualityWide = 1; +const TInt KVideoQualityEmailHigh = 2; +const TInt KVideoQualityEmailNormal = 3; +const TInt KVideoQualitySharing = 4; + +// Video quality type indexes +const TInt KVideoQualityTVHighType = 5; +const TInt KVideoQualityWideType = 6; +const TInt KVideoQualityEmailHighType = 7; +const TInt KVideoQualityEmailNormalType = 8; +const TInt KVideoQualitySharingType = 9; + +// ============================ MEMBER FUNCTIONS =============================== + +// --------------------------------------------------------- +// CCamSliderLegend::~CCamSliderLegend +// destructor +// --------------------------------------------------------- +// +CCamSliderLegend::~CCamSliderLegend() + { + delete iText; + delete iBitmap; + delete iMask; + } + +// --------------------------------------------------------- +// CCamSliderLegend::Draw +// Draws the legend +// --------------------------------------------------------- +// +void CCamSliderLegend::Draw( CWindowGc& aGc ) const + { + if ( iItem == ECamSliderLegendItemText ) + { + TRgb color; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + AknsUtils::GetCachedColor( skin, color, KAknsIIDQsnTextColors, + EAknsCIQsnTextColorsCG6 ); + + iPosition.DrawText( aGc, iText->Des(), ETrue, color ); + } + else + { + iIconRect.DrawImage( aGc, iBitmap, iMask ); + } + } + +// --------------------------------------------------------- +// CCamSliderLegend::Rect +// Returns the legend rect +// --------------------------------------------------------- +// +TRect CCamSliderLegend::Rect() const + { + if ( iItem == ECamSliderLegendItemText ) + { + return iPosition.TextRect(); + } + else + { + return iIconRect.Rect(); + } + } + + +// --------------------------------------------------------- +// CCamSliderLegend::ConstructL +// Constructs the layout entry +// --------------------------------------------------------- +// +void CCamSliderLegend::ConstructL( const TAknLayoutRect& aLayoutRect, + TInt aBitmap, TInt aMask ) + { + TFileName resFileName; + CamUtility::ResourceFileName( resFileName ); + TPtrC resname = resFileName; + + iItem = ECamSliderLegendItemIcon; + iIconRect = aLayoutRect; + + AknIconUtils::CreateIconL( iBitmap, iMask, resname, aBitmap, aMask ); + AknIconUtils::SetSize( iBitmap, iIconRect.Rect().Size() ); + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::CGSCamQualitySettingSlider +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CGSCamQualitySettingSlider::CGSCamQualitySettingSlider( + MCamSettingValueObserver* aObserver, TCamSettingItemIds aSettingType, + TInt aSteps, CCamConfiguration* aConfiguration ) : + iSettingObserver( aObserver ), iSettingType( aSettingType ), + iSteps( aSteps ), iConfiguration ( aConfiguration ) + { + switch ( iSettingType ) + { + case ECamSettingItemPhotoQuality: + { + if( CamUtility::GetCommonPsiInt( + ECamPsiNumberSupportedStillQualities, iMaxSliderValue) != + KErrNone ) + { + iMaxSliderValue = KMaxBackCameraPhotoQuality; + } + iMinSliderValue = KMinQuality; + iNumSliderValues = iMaxSliderValue + 1; + } + break; + + case ECamSettingItemVideoQuality: + { + if( CamUtility::GetCommonPsiInt( + ECamPsiNumberSupportedVideoQualities, iMaxSliderValue) != + KErrNone ) + { + iMaxSliderValue = KMaxBackCameraVideoQuality; + } + iMinSliderValue = KMinQuality; + iNumSliderValues = iMaxSliderValue + 1; + } + break; + default: + { + } + break; + } + + // Prefill iBitmapShafts and iBitmapShaftMasks with NULL + for ( TInt i = 0; i <= BITMAP_SHAFT_MAX_DIVISIONS; i++) + { + iBitmapShafts[i] = static_cast(NULL); + iBitmapShaftsMasks[i] = static_cast(NULL); + } + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CGSCamQualitySettingSlider::ConstructL( const CCoeControl* aParent ) + { + __ASSERT_DEBUG( aParent!=NULL, CamPanic( ECamPanicNullPointer ) ); + + iParentControl = aParent; + SetContainerWindowL( *iParentControl ); + + TFileName resFileName; + CamUtility::ResourceFileName( resFileName ); + TPtrC resname = resFileName; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + if ( IsThreeTicksSlider() ) + { + // Create component bitmaps + AknsUtils::CreateIconL( skin, KAknsIIDQgnGrafNsliderCam4Image1, + iBitmapShafts[KImageQualityHigh], + iBitmapShaftsMasks[KImageQualityHigh], + resname, + EMbmCameraappQgn_graf_nslider_cam4_image_1, + EMbmCameraappQgn_graf_nslider_cam4_image_1_mask ); + AknsUtils::CreateIconL( skin, KAknsIIDQgnGrafNsliderCam4Image2, + iBitmapShafts[KImageQualityMedium], + iBitmapShaftsMasks[KImageQualityMedium], + resname, + EMbmCameraappQgn_graf_nslider_cam4_image_2, + EMbmCameraappQgn_graf_nslider_cam4_image_2_mask ); + AknsUtils::CreateIconL( skin, KAknsIIDQgnGrafNsliderCam4Image3, + iBitmapShafts[KImageQualityLow], + iBitmapShaftsMasks[KImageQualityLow], + resname, + EMbmCameraappQgn_graf_nslider_cam4_image_3, + EMbmCameraappQgn_graf_nslider_cam4_image_3_mask ); + } + else // iSettingType == ECamSettingItemVideoQuality + { + AknsUtils::CreateIconL( skin, KAknsIIDQgnGrafNsliderCam4Video1, + iBitmapShafts[KVideoQualityTVHigh], + iBitmapShaftsMasks[KVideoQualityTVHigh], + resname, + EMbmCameraappQgn_graf_nslider_cam4_video_1, + EMbmCameraappQgn_graf_nslider_cam4_video_1_mask ); + AknsUtils::CreateIconL( skin, KAknsIIDQgnGrafNsliderCam4Video2, + iBitmapShafts[KVideoQualityWide], + iBitmapShaftsMasks[KVideoQualityWide], + resname, + EMbmCameraappQgn_graf_nslider_cam4_video_2, + EMbmCameraappQgn_graf_nslider_cam4_video_2_mask ); + AknsUtils::CreateIconL( skin, KAknsIIDQgnGrafNsliderCam4Video3, + iBitmapShafts[KVideoQualityEmailHigh], + iBitmapShaftsMasks[KVideoQualityEmailHigh], + resname, + EMbmCameraappQgn_graf_nslider_cam4_video_3, + EMbmCameraappQgn_graf_nslider_cam4_video_3_mask ); + AknsUtils::CreateIconL( skin, KAknsIIDQgnGrafNsliderCam4Video4, + iBitmapShafts[KVideoQualityEmailNormal], + iBitmapShaftsMasks[KVideoQualityEmailNormal], + resname, + EMbmCameraappQgn_graf_nslider_cam4_video_4, + EMbmCameraappQgn_graf_nslider_cam4_video_4_mask ); + AknsUtils::CreateIconL( skin, KAknsIIDQgnGrafNsliderCam4Video5, + iBitmapShafts[KVideoQualitySharing], + iBitmapShaftsMasks[KVideoQualitySharing], + resname, + EMbmCameraappQgn_graf_nslider_cam4_video_5, + EMbmCameraappQgn_graf_nslider_cam4_video_5_mask ); + } + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CGSCamQualitySettingSlider* CGSCamQualitySettingSlider::NewL( + const CCoeControl* aParent, + MCamSettingValueObserver* aObserver, + TCamSettingItemIds aSettingItem, + TInt aSteps, + CCamConfiguration* aConfiguration ) + { + CGSCamQualitySettingSlider* self = + new( ELeave ) CGSCamQualitySettingSlider( aObserver, aSettingItem, + aSteps, aConfiguration); + CleanupStack::PushL( self ); + self->ConstructL( aParent ); + CleanupStack::Pop( self ); + self->iConfiguration = aConfiguration; + return self; + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::~CGSCamQualitySettingSlider +// Destructor +// ----------------------------------------------------------------------------- +// +CGSCamQualitySettingSlider::~CGSCamQualitySettingSlider() + { + for ( TInt i = 0; i <= BITMAP_SHAFT_MAX_DIVISIONS; i++) + { + delete iBitmapShafts[i]; + delete iBitmapShaftsMasks[i]; + } + + // Destroy legend strings + iLegendArray.ResetAndDestroy(); + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::InitializeL +// Sets up the slider with the initial value +// ----------------------------------------------------------------------------- +// +void CGSCamQualitySettingSlider::InitializeL( TInt aValue, + HBufC* aTopSubtitle, + HBufC* aBottomSubtitle ) + { + // Check the initial value is valid. If no, leave. + if ( aValue < iMinSliderValue || + aValue > iMaxSliderValue ) + { + PRINT3( _L("Camera <> CGSCamQualitySettingSlider::InitializeL - illegal value: %d (min %d, max %d)" ), + aValue, iMinSliderValue, iMaxSliderValue ); + User::Leave( KErrArgument ); + } + + iValue = aValue; + iTopSubtitle = aTopSubtitle; + iBottomSubtitle = aBottomSubtitle; + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::MinValue +// Returns the minimum slider value +// ----------------------------------------------------------------------------- +// +TInt CGSCamQualitySettingSlider::MinValue() const + { + return iMinSliderValue; + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::MaxValue +// Returns the maximum slider value +// ----------------------------------------------------------------------------- +// +TInt CGSCamQualitySettingSlider::MaxValue() const + { + return iMaxSliderValue; + } + + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::SetRange +// Sets the minimum and maximum values of the slider control +// ----------------------------------------------------------------------------- +// +void CGSCamQualitySettingSlider::SetRange( TInt aMin, TInt aMax ) + { + ASSERT( aMin < aMax ); + iMinSliderValue = aMin; + iMaxSliderValue = aMax; + iNumSliderValues = iMaxSliderValue + 1; + } + + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::Draw +// Draws the slider +// ----------------------------------------------------------------------------- +// +void CGSCamQualitySettingSlider::Draw( const TRect& /*aRect*/ ) const + { + CFbsBitmap* shaft; + CFbsBitmap* shaftMask; + CWindowGc& gc = SystemGc(); + TRgb color; + + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + AknsUtils::GetCachedColor( skin, color, KAknsIIDQsnTextColors, + EAknsCIQsnTextColorsCG6 ); + + MAknsControlContext *cc = AknsDrawUtils::ControlContext( iParentControl ); + //AknsDrawUtils::Background( skin, cc, iParentControl, gc, Rect() ); + + // draw top and bottom subtitles + iLayoutSubtitleTop.DrawText( gc, iTopSubtitle->Des(), ETrue, color ); + iLayoutSubtitleBottom.DrawText( gc, iBottomSubtitle->Des(), ETrue, color ); + + // Draw the legend icons + TInt count = iLegendArray.Count(); + TInt i = 0; + for ( i = 0; i < count; i++ ) + { + iLegendArray[i]->Draw( gc ); + } + + // the quality slider has a different shaft icon for each slider value + if ( iMaxSliderValue <= BITMAP_SHAFT_MAX_DIVISIONS + && iValue <= BITMAP_SHAFT_MAX_DIVISIONS + && iMaxSliderValue >= 0 + && iValue >= 0 ) + { + shaft = iBitmapShafts[iValue]; + shaftMask = iBitmapShaftsMasks[iValue]; + } + else + { + shaft = NULL; + } + + // Draw the shaft bitmap + if ( shaft ) + { + iShaftLayout.DrawImage( gc, shaft, shaftMask ); + } + } + + +// --------------------------------------------------------- +// CGSCamQualitySettingSlider::SizeChanged +// Calculates the new minimum size +// --------------------------------------------------------- +// +void CGSCamQualitySettingSlider::SizeChanged() + { + TRAPD( ignore, ReadLayoutL() ); + if ( ignore ) + { + // Do nothing ( removes build warning ) + } + + // Work out the minimum size + TInt count = iLegendArray.Count(); + + TRect minimumRect; + + // Start min rect as first legend text + if ( count > 0 ) + { + minimumRect = iLegendArray[0]->Rect(); + } + + // Take into account the other legend texts + TInt i; + for ( i = 1; i < count; i++ ) + { + minimumRect.BoundingRect( iLegendArray[i]->Rect() ); + } + + // Take into account the shaft bitmap + minimumRect.BoundingRect( iShaftLayout.Rect() ); + + iMinimumSize = minimumRect.Size(); + } + + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::OfferKeyEventL +// Allows the user to change the current EV value via key presses. +// ----------------------------------------------------------------------------- +// +TKeyResponse CGSCamQualitySettingSlider::OfferKeyEventL( + const TKeyEvent& aKeyEvent, TEventCode aType ) + { + if ( aType == EEventKey ) + { + if ( aKeyEvent.iScanCode == EStdKeyUpArrow ) + { + if ( iValue < iMaxSliderValue ) + { + iValue ++; + // Tell observer about change + iSettingObserver->HandleSettingValueUpdateL( iValue ); + DrawNow(); + } + + return EKeyWasConsumed; + } + else if ( aKeyEvent.iScanCode == EStdKeyDownArrow ) + { + if ( iValue > iMinSliderValue ) + { + iValue --; + // Tell observer about change + iSettingObserver->HandleSettingValueUpdateL( iValue ); + DrawNow(); + } + + return EKeyWasConsumed; + } + else if ( aKeyEvent.iCode == EKeyOK && aKeyEvent.iRepeats == 0 ) + { + return EKeyWasConsumed; + } + // No allowing left and right key events thansfer to other view. + else if( aKeyEvent.iScanCode == EStdKeyLeftArrow + || aKeyEvent.iScanCode == EStdKeyRightArrow ) + { + return EKeyWasConsumed; + } + // otherwise, do nothing + else + { + // empty statement to remove Lint error, MISRA required rule 60 + } + } + return EKeyWasNotConsumed; + } + +// --------------------------------------------------------- +// CGSCamQualitySettingSlider::MinimumSize +// --------------------------------------------------------- +// +TSize CGSCamQualitySettingSlider::MinimumSize() + { + TSize zerosize = TSize( 0, 0 ); + if ( iMinimumSize == zerosize ) + { + SizeChanged(); + } + return iMinimumSize; + } + + +// --------------------------------------------------------- +// CGSCamQualitySettingSlider::ReadLayoutL +// --------------------------------------------------------- +// +void CGSCamQualitySettingSlider::ReadLayoutL() + { + // We can use Rect() as the parent rectangle for subcomponents, because + // CGSCamQualitySettingSlider uses the main_cset_slider_pane layout + + // We're starting again from scratch, so delete the old layout(s) + iLegendArray.ResetAndDestroy(); + + if( iSettingType == ECamSettingItemVideoQuality ) + { + if ( CamUtility::IsNhdDevice() ) + { + TouchLayoutVideo(); + } + else + { + NonTouchLayoutVideo(); + } + + AppendLegendArrayL( ECamPsiVideoQualityIconIds ); + AppendLegendArrayL( ECamPsiVideoQualityFileTypeId, iNumSliderValues ); + } + else // iSettingType == ECamSettingItemPhotoQuality + { + if ( CamUtility::IsNhdDevice() ) + { + TouchLayoutPhoto(); + } + else + { + NonTouchLayoutPhoto(); + } + AppendLegendArrayL( ECamPsiStillQualityIconIds ); + } + + // set the shaft icon sizes + for ( TInt i = 0; i < BITMAP_SHAFT_MAX_DIVISIONS+1; i++ ) + { + AknIconUtils::SetSize( iBitmapShafts[ i ], iShaftLayout.Rect().Size(), + EAspectRatioNotPreserved ); + } + + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::TouchLayoutVideo +// Generate layouts for slider legend icons +// ----------------------------------------------------------------------------- +// +void CGSCamQualitySettingSlider::TouchLayoutVideo() + { + // Set the shaft layout structure + iShaftLayout.LayoutRect( Rect(), + AknLayoutScalable_Apps::cset_slider_pane( 4 ) ); + // set subtitle text layouts + iLayoutSubtitleTop.LayoutText( Rect(), + AknLayoutScalable_Apps::main_cset_slider_pane_t1( 4 ) ); + iLayoutSubtitleBottom.LayoutText( Rect(), + AknLayoutScalable_Apps::main_cset_slider_pane_t7( 4 ) ); + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::NonTouchLayoutVideo +// Generate layouts for slider legend icons +// ----------------------------------------------------------------------------- +// +void CGSCamQualitySettingSlider::NonTouchLayoutVideo() + { + // Set the shaft layout structure + iShaftLayout.LayoutRect( Rect(), + AknLayoutScalable_Apps::cset6_slider_pane( 4 )); + // set subtitle text layouts + iLayoutSubtitleTop.LayoutText( Rect(), + AknLayoutScalable_Apps::main_cset6_slider_pane_t1( 4 ) ); + iLayoutSubtitleBottom.LayoutText( Rect(), + AknLayoutScalable_Apps::main_cset6_slider_pane_t7( 4 ) ); + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::TouchLayoutPhoto +// Generate layouts for slider legend icons +// ----------------------------------------------------------------------------- +// +void CGSCamQualitySettingSlider::TouchLayoutPhoto() + { + iShaftLayout.LayoutRect( Rect(), + AknLayoutScalable_Apps::cset_slider_pane( 2 ) ); + // set subtitle text layouts + iLayoutSubtitleTop.LayoutText( Rect(), + AknLayoutScalable_Apps::main_cset_slider_pane_t1( 2 ) ); + iLayoutSubtitleBottom.LayoutText( Rect(), + AknLayoutScalable_Apps::main_cset_slider_pane_t7( 2 ) ); + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::NonTouchLayoutPhoto +// Generate layouts for slider legend icons +// ----------------------------------------------------------------------------- +// +void CGSCamQualitySettingSlider::NonTouchLayoutPhoto() + { + // Set the shaft layout structure + iShaftLayout.LayoutRect( Rect(), + AknLayoutScalable_Apps::cset6_slider_pane( 2 )); + // set subtitle text layouts + iLayoutSubtitleTop.LayoutText( Rect(), + AknLayoutScalable_Apps::main_cset6_slider_pane_t1( 2 ) ); + iLayoutSubtitleBottom.LayoutText( Rect(), + AknLayoutScalable_Apps::main_cset6_slider_pane_t7( 2 ) ); + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::AppendLegendArrayL +// ----------------------------------------------------------------------------- +// +void CGSCamQualitySettingSlider::AppendLegendArrayL( TCamPsiKey aKey, + TInt aNumSliderValues ) + { + RArray array; + CleanupClosePushL( array ); + + TAknLayoutRect layout; + iConfiguration->GetPsiIntArrayL( aKey, array ); + for( TInt i = 0; i < array.Count(); i+=2 ) + { + // get positioning info + if ( iSettingType == ECamSettingItemVideoQuality ) + { + if ( CamUtility::IsNhdDevice() ) + { + layout = GetTouchVideoLegendLayout( Rect(), + i/2 + aNumSliderValues ); + } + else + { + layout = GetNonTouchVideoLegendLayout( Rect(), + i/2 + aNumSliderValues ); + } + } + else + { + if ( CamUtility::IsNhdDevice() ) + { + if ( IsThreeTicksSlider() ) + { + // Touch layouts supports only three ticks sliders + layout = GetTouchPhotoLegendLayout( Rect(), + i/2 + aNumSliderValues ); + } + else + { + // Five ticks slider is taken from NonTouch layouts + layout = GetNonTouchPhotoLegend5Layout( Rect(), + i/2 + aNumSliderValues ); + } + } + else + { + if ( IsThreeTicksSlider() ) + { + layout = GetNonTouchPhotoLegend3Layout( Rect(), + i/2 + aNumSliderValues ); + } + else + { + layout = GetNonTouchPhotoLegend5Layout( Rect(), + i/2 + aNumSliderValues ); + } + } + } + + CCamSliderLegend* legend = new ( ELeave ) CCamSliderLegend(); + CleanupStack::PushL( legend ); + legend->ConstructL( layout, array[i], array[i+1] ); + + User::LeaveIfError( iLegendArray.Append( legend ) ); + CleanupStack::Pop( legend ); + } + CleanupStack::PopAndDestroy( &array ); + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::GetTouchVideoLegendLayout +// Select layout for slider legend icons +// ----------------------------------------------------------------------------- +// +TAknLayoutRect CGSCamQualitySettingSlider::GetTouchVideoLegendLayout( + const TRect& aParentRect, + TInt aIndex ) const + { + TAknLayoutRect res; + switch ( aIndex ) + { + case KVideoQualityTVHigh : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset_slider_pane_g7( 0 ) ); + break; + } + case KVideoQualityTVHighType : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset_slider_pane_g8( 0 ) ); + break; + } + case KVideoQualityWide : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset_slider_pane_g11( 0 ) ); + + break; + } + case KVideoQualityWideType : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset_slider_pane_g12( 0 ) ); + break; + } + case KVideoQualityEmailHigh : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset_slider_pane_g16( 0 ) ); + break; + } + case KVideoQualityEmailHighType : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset_slider_pane_g17( 0 ) ); + break; + } + case KVideoQualityEmailNormal : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset_slider_pane_g13( 0 ) ); + break; + } + case KVideoQualityEmailNormalType : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset_slider_pane_g14( 0 ) ); + break; + } + case KVideoQualitySharing : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset_slider_pane_g16( 0 ) ); + break; + } + case KVideoQualitySharingType : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset_slider_pane_g17( 0 ) ); + break; + } + default: + { + break; + } + } + return res; + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::GetNonTouchVideoLegendLayout +// Select layout for slider legend icons +// ----------------------------------------------------------------------------- +// +TAknLayoutRect CGSCamQualitySettingSlider::GetNonTouchVideoLegendLayout( + const TRect& aParentRect, + TInt aIndex ) const + { + TAknLayoutRect res; + switch ( aIndex ) + { + case KVideoQualityTVHigh : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g7( 0 ) ); + break; + } + case KVideoQualityTVHighType : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g8( 0 ) ); + break; + } + case KVideoQualityWide : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g11( 0 ) ); + break; + } + case KVideoQualityWideType : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g12( 0 ) ); + break; + } + case KVideoQualityEmailHigh : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g16( 0 ) ); + break; + } + case KVideoQualityEmailHighType : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g17( 0 ) ); + break; + } + case KVideoQualityEmailNormal : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g13( 0 ) ); + break; + } + case KVideoQualityEmailNormalType : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g14( 0 ) ); + break; + } + case KVideoQualitySharing : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g16( 0 ) ); + break; + } + case KVideoQualitySharingType : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g17( 0 ) ); + break; + } + default: + { + break; + } + } + return res; + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::GetTouchPhotoLegendLayout +// Select layout for slider legend icons +// ----------------------------------------------------------------------------- +// +TAknLayoutRect CGSCamQualitySettingSlider::GetTouchPhotoLegendLayout( + const TRect& aParentRect, + TInt aIndex ) const + { + TAknLayoutRect res; + switch ( aIndex ) + { + case KImageQualityHigh : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset_slider_pane_g3( 0 ) ); + break; + } + case KImageQualityMedium : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset_slider_pane_g4( 0 ) ); + break; + } + case KImageQualityLow : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset_slider_pane_g5( 0 ) ); + break; + } + default: + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset_slider_pane_g5( 0 ) ); + break; + } + } + return res; + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::GetNonTouchPhotoLegend3Layout +// Select layout for slider legend icons +// ----------------------------------------------------------------------------- +// +TAknLayoutRect CGSCamQualitySettingSlider::GetNonTouchPhotoLegend3Layout( + const TRect& aParentRect, + TInt aIndex ) const + { + TAknLayoutRect res; + switch ( aIndex ) + { + case KImageQualityHigh : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g7( 0 ) ); + break; + } + case KImageQualityMedium : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g4( 0 ) ); + break; + } + case KImageQualityLow : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g5( 0 ) ); + break; + } + default: + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g5( 0 ) ); + break; + } + } + return res; + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::GetNonTouchPhotoLegend5Layout +// Select layout for slider legend icons +// ----------------------------------------------------------------------------- +// +TAknLayoutRect CGSCamQualitySettingSlider::GetNonTouchPhotoLegend5Layout( + const TRect& aParentRect, + TInt aIndex ) const + { + TAknLayoutRect res; + switch ( aIndex ) + { + case KImageQualityHigh : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g7( 0 ) ); + break; + } + case KImageQualityMedium : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g9( 0 ) ); + break; + } + case KImageQualityLow : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g4( 0 ) ); + break; + } + case KImageQualityLower : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g13( 0 ) ); + + break; + } + case KImageQualityLowest : + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g5( 0 ) ); + break; + } + default: + { + res.LayoutRect( aParentRect, + AknLayoutScalable_Apps::main_cset6_slider_pane_g5( 0 ) ); + + break; + } + } + return res; + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::IsThreeTicksSlider +// Select layout for slider legend icons +// ----------------------------------------------------------------------------- +// +TBool CGSCamQualitySettingSlider::IsThreeTicksSlider() const + { + if ( !iConfiguration ) + { + return ETrue; + } + TInt count; + if ( iSettingType == ECamSettingItemVideoQuality ) + { + count = iConfiguration->NumVideoQualities(); + } + else + { + count = iConfiguration->NumPrimaryImageQualities(); + } + + PRINT1( _L("Camera <> CGSCamQualitySettingSlider::IsThreeTicksSlider count=%d"), count ); + return count < 4; // Magic: less than three steps + } + +// ----------------------------------------------------------------------------- +// CGSCamQualitySettingSlider::HandlePointerEventL +// Handles slider pointer events +// ----------------------------------------------------------------------------- +// +void CGSCamQualitySettingSlider::HandlePointerEventL( + const TPointerEvent& aPointerEvent ) + { + + CCoeControl::HandlePointerEventL( aPointerEvent ); + + // This is the max bitmap offset from the top of the shaft that the + // selection can be + TInt maxVOffset = iShaftLayout.Rect().Size().iHeight; + + // This is the no. of pixels for a "step" + TInt stepInPixels = ( maxVOffset * KDivisorFactor ) / iNumSliderValues; + + // Calculate new setting value + TInt deltaY = aPointerEvent.iPosition.iY - iShaftLayout.Rect().iTl.iY; + TInt nbrSteps = deltaY / ( stepInPixels / KDivisorFactor ); + iValue = iMaxSliderValue - nbrSteps; + + if ( iValue < iMinSliderValue ) + { + iValue = iMinSliderValue; + } + + if (iValue > iMaxSliderValue) + { + iValue = iMaxSliderValue; + } + // Tell observer about change + iSettingObserver->HandleSettingValueUpdateL( iValue ); + DrawNow(); + + } + +// End of File +