--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/GsCamcorderPlugin/src/GSCamQualitySettingPage.cpp Wed Sep 01 12:30:54 2010 +0100
@@ -0,0 +1,309 @@
+/*
+* Copyright (c) 2007 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: Setting page for Image/Video quality.*
+*/
+
+
+
+// INCLUDE FILES
+#include <gscamerapluginrsc.rsg>
+#include <aknsettingitemlist.h>
+#include <barsread.h>
+#include "GSCamQualitySettingPage.h"
+#include "GSCamQualitySettingContainer.h"
+#include "CamUtility.h"
+#include "MCamAppController.h"
+#include "CamAppUiBase.h"
+#include <aknlayoutscalable_apps.cdl.h>
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+// ---------------------------------------------------------------------------
+// CGSCamQualitySettingPage::CGSCamQualitySettingPage
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CGSCamQualitySettingPage::CGSCamQualitySettingPage(
+ TCamCameraMode aMode,
+ TDesC& aSettingTitleText,
+ TInt aSettingNumber,
+ TInt aControlType,
+ TInt aEditorResourceId,
+ TInt aSettingPageResourceId,
+ MAknQueryValue& aQueryValue )
+ : CAknSettingPage( &aSettingTitleText,
+ aSettingNumber,
+ aControlType,
+ aEditorResourceId,
+ aSettingPageResourceId ),
+ iQueryValue( aQueryValue ),
+ iController( static_cast<CCamAppUiBase*>( CCoeEnv::Static()->AppUi() )->AppController() ),
+ iMode( aMode )
+ {
+ }
+// ---------------------------------------------------------------------------
+// CGSCamQualitySettingPage::~CGSCamQualitySettingPage
+// C++ destructor
+// ---------------------------------------------------------------------------
+//
+CGSCamQualitySettingPage::~CGSCamQualitySettingPage()
+ {
+ PRINT( _L("Camera => ~CGSCamQualitySettingPage") );
+ delete iQualityContainer;
+
+ if ( iTimer && iTimer->IsActive() )
+ {
+ iTimer->Cancel();
+ }
+ delete iTimer;
+
+ TRAP_IGNORE( iController.CancelPreviewChangesL() );
+ PRINT( _L("Camera <= ~CGSCamQualitySettingPage") );
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCamQualitySettingPage::ConstructL
+// Construct the setting page
+// ---------------------------------------------------------------------------
+//
+void CGSCamQualitySettingPage::ConstructL()
+ {
+ // create the timer used for callbacks
+ iTimer = CPeriodic::NewL( CActive::EPriorityStandard );
+ // this needs to be created before BaseConstructL as it sets the
+ // size of the setting page which will result in SizeChanged being called
+ iQualityContainer = CGSCamQualitySettingContainer::NewL( iController,
+ iMode,
+ this );
+ BaseConstructL();
+
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCamQualitySettingPage::UpdateSettingL
+// Called when the state of quality control changes
+// ---------------------------------------------------------------------------
+//
+void CGSCamQualitySettingPage::UpdateSettingL()
+ {
+ TBool settingValueEnabled = ETrue;
+ iCurrentVal = iQualityContainer->SelectedQuality();
+
+ if ( ECamControllerVideo == iMode )
+ {
+ iSettingItemId = ECamSettingItemVideoQuality;
+ }
+ else
+ {
+ iSettingItemId = ECamSettingItemPhotoQuality;
+ }
+
+ // Inform the base setting page class
+ SetDataValidity( settingValueEnabled );
+ UpdateCbaL();
+
+ // If the list item is enabled update the image/video count to
+ // let the user know how this item would affect the remaining images/videos
+ if ( settingValueEnabled )
+ {
+ if ( iTimer->IsActive() )
+ {
+ iTimer->Cancel();
+ }
+ iTimer->Start( 10*1000,
+ 10*1000,
+ TCallBack( PreviewSettingChange, this ) );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCamQualitySettingPage::ProcessCommandL
+// Processes events from the softkeys.
+// ---------------------------------------------------------------------------
+//
+void CGSCamQualitySettingPage::ProcessCommandL( TInt aCommandId )
+ {
+ HideMenu();
+
+ // Respond to softkey events
+ switch ( aCommandId )
+ {
+ case EAknSoftkeyOk:
+ case EAknSoftkeySelect:
+ SelectCurrentItemL();
+ AttemptExitL( ETrue );
+ iCurrentVal = iQualityContainer->SelectedQuality();
+ iController.CommitPreviewChanges();
+ break;
+ case EAknSoftkeyCancel:
+ AttemptExitL( EFalse );
+ iController.CancelPreviewChangesL();
+ break;
+ default:
+ break;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCamQualitySettingPage::PostDisplayCheckL
+// Customises some of the functionality so that the custom quality control
+// is used instead of the base classes editor control
+// ---------------------------------------------------------------------------
+//
+TBool CGSCamQualitySettingPage::PostDisplayCheckL()
+ {
+ // don't use the editor control in the base class
+ // use the quality control instead.
+ iQualityContainer->SetObserver( this );
+ return CAknSettingPage::PostDisplayCheckL();
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCamQualitySettingPage::SelectCurrentItemL
+// Uses the query value to inform the setting item that
+// a new quality has been selected
+// ---------------------------------------------------------------------------
+//
+void CGSCamQualitySettingPage::SelectCurrentItemL()
+ {
+ iQueryValue.SetCurrentValueIndex( iQualityContainer->SelectedQuality() );
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCamQualitySettingPage::ConstructFromResourceL
+// Constructs the quality container from the resource file
+// ---------------------------------------------------------------------------
+//
+void CGSCamQualitySettingPage::ConstructFromResourceL( TResourceReader& aReader )
+ {
+ // setting page window is created in the base class
+ CAknSettingPage::ConstructFromResourceL( aReader );
+
+ TInt resourceId = ( ECamControllerVideo == iMode )
+ ? R_CAM_SETTING_VIDEO_QUALITY_SLIDER
+ : R_CAM_SETTING_PHOTO_QUALITY_SLIDER;
+
+ TResourceReader reader;
+ iCoeEnv->CreateResourceReaderLC( reader, resourceId );
+ iQualityContainer->ConstructFromResourceL( reader );
+ CleanupStack::PopAndDestroy(); //reader
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCamQualitySettingPage::CountComponentControls
+// Returns the number of component controls
+// ---------------------------------------------------------------------------
+//
+TInt CGSCamQualitySettingPage::CountComponentControls() const
+ {
+ return 1; // the quality container
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCamQualitySettingPage::ComponentControl
+// Returns the control at the given index
+// ---------------------------------------------------------------------------
+//
+CCoeControl* CGSCamQualitySettingPage::ComponentControl( TInt /*aIndex*/ ) const
+ {
+ return iQualityContainer;
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCamQualitySettingPage::Draw
+// Draws the setting page
+// ---------------------------------------------------------------------------
+//
+void CGSCamQualitySettingPage::Draw( const TRect& /*aRect*/ ) const
+ {
+ CWindowGc& gc = SystemGc();
+ gc.SetPenStyle( CGraphicsContext::ENullPen );
+ gc.SetBrushColor( KRgbWhite );
+ gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+ gc.DrawRect( Rect() );
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCamQualitySettingPage::SizeChanged
+// Handles a change in the size of the page
+// ---------------------------------------------------------------------------
+//
+void CGSCamQualitySettingPage::SizeChanged()
+ {
+ CAknSettingPage::SizeChanged();
+
+ AknLayoutUtils::LayoutControl( iQualityContainer, Rect(), AknLayoutScalable_Apps::main_cam_set_pane_g1( 6 ) );
+
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCamQualitySettingPage::OfferKeyEventL
+// Handles the key event
+// ---------------------------------------------------------------------------
+//
+TKeyResponse
+CGSCamQualitySettingPage::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ // Always react to Escape key by cancelling the setting page
+ if ( aType == EEventKey && aKeyEvent.iCode == EKeyEscape)
+ {
+ ProcessCommandL( EAknSoftkeyCancel );
+ return EKeyWasConsumed;
+ }
+
+ // Only handle other key events if we're focused
+ if ( IsFocused() )
+ {
+ // Abstraction of key events: Escape is handled like Cancel
+ // OK key is handled like the Select softkey by default
+ if ( aType == EEventKey && aKeyEvent.iCode == EKeyOK )
+ {
+ if ( aKeyEvent.iRepeats != 0 )
+ {
+ return EKeyWasConsumed;
+ }
+ if ( DataValidity() )
+ {
+ ProcessCommandL( EAknSoftkeySelect );
+ }
+ return EKeyWasConsumed;
+ }
+ }
+
+ // offer the key to the quality container class
+ // if not handled by the setting page
+ return iQualityContainer->OfferKeyEventL( aKeyEvent, aType );
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCamQualitySettingPage::PreviewSettingChangeL
+// Previews the setting value
+// ---------------------------------------------------------------------------
+//
+TInt CGSCamQualitySettingPage::PreviewSettingChange( TAny* aAny )
+ {
+ CGSCamQualitySettingPage* settingPage =
+ static_cast<CGSCamQualitySettingPage*>( aAny );
+ // preview the setting value - will
+ // update the engine and the navi couner
+ TRAP_IGNORE( settingPage->iController.PreviewSettingChangeL(
+ settingPage->iSettingItemId,
+ settingPage->iCurrentVal ) );
+
+ // cancel the timer
+ settingPage->iTimer->Cancel();
+
+ return KErrNone;
+ }