diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraapp/generic/GsCamcorderPlugin/src/CamLocationSettingPage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/GsCamcorderPlugin/src/CamLocationSettingPage.cpp Wed Sep 01 12:30:54 2010 +0100 @@ -0,0 +1,301 @@ +/* +* 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 location setting in Image&Video Settings.* +*/ + + + +// INCLUDE FILES +#include +#include +#include +#include "CamUtility.h" +#include "CamLocationSettingPage.h" +#include "MCamAppController.h" +#include "CamLocationSettingContainer.h" +#include +#include + +// CONSTANTS + + +// ============================ MEMBER FUNCTIONS =============================== +// --------------------------------------------------------------------------- +// CCamLocationSettingPage::CCamLocationSettingPage +// C++ constructor +// --------------------------------------------------------------------------- +// +CCamLocationSettingPage::CCamLocationSettingPage( + TCamCameraMode aMode, + TDesC& aSettingTitleText, + TInt aSettingNumber, + TInt aControlType, + TInt aEditorResourceId, + TInt aSettingPageResourceId, + MAknQueryValue& aQueryValue, + MCamAppController& aController ) + : CAknSettingPage( &aSettingTitleText, + aSettingNumber, + aControlType, + aEditorResourceId, + aSettingPageResourceId ), + iQueryValue( aQueryValue ), + iController( aController ), + iMode( aMode ) + { + } +// --------------------------------------------------------------------------- +// CCamLocationSettingPage::~CCamLocationSettingPage +// C++ destructor +// --------------------------------------------------------------------------- +// +CCamLocationSettingPage::~CCamLocationSettingPage() + { + PRINT( _L("Camera => ~CCamLocationSettingPage") ); + delete iLocationContainer; + + if ( iTimer && iTimer->IsActive() ) + { + iTimer->Cancel(); + } + delete iTimer; + + TRAP_IGNORE( iController.CancelPreviewChangesL() ); + PRINT( _L("Camera <= ~CCamLocationSettingPage") ); + } + +// --------------------------------------------------------------------------- +// CCamLocationSettingPage::ConstructL +// Construct the setting page +// --------------------------------------------------------------------------- +// +void CCamLocationSettingPage::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 + iLocationContainer = CCamLocationSettingContainer::NewL( iController, + iMode, + this ); + BaseConstructL(); + } + +// --------------------------------------------------------------------------- +// CCamLocationSettingPage::UpdateSettingL +// Called when the state of location setting changes +// --------------------------------------------------------------------------- +// +void CCamLocationSettingPage::UpdateSettingL() + { + TBool settingValueEnabled = ETrue; + iCurrentVal = iLocationContainer->SelectedValue(); + iSettingItemId = ECamSettingItemRecLocation; + // Inform the base setting page class + SetDataValidity( settingValueEnabled ); + UpdateCbaL(); + } + +// --------------------------------------------------------------------------- +// CCamLocationSettingPage::ProcessCommandL +// Processes events from the softkeys. +// --------------------------------------------------------------------------- +// +void CCamLocationSettingPage::ProcessCommandL( TInt aCommandId ) + { + HideMenu(); + + // Respond to softkey events + switch ( aCommandId ) + { + case EAknSoftkeyOk: + case EAknSoftkeySelect: + SelectCurrentItemL(); + AttemptExitL( ETrue ); + iController.CommitPreviewChanges(); + break; + case EAknSoftkeyCancel: + AttemptExitL( EFalse ); + iController.CancelPreviewChangesL(); + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// CCamLocationSettingPage::PostDisplayCheckL +// Customises some of the functionality so that the custom control +// is used instead of the base classes editor control +// --------------------------------------------------------------------------- +// +TBool CCamLocationSettingPage::PostDisplayCheckL() + { + // don't use the editor control in the base class + // use the custom control instead. + iLocationContainer->SetObserver( this ); + return CAknSettingPage::PostDisplayCheckL(); + } + +// --------------------------------------------------------------------------- +// CCamLocationSettingPage::SelectCurrentItemL +// Uses the query value to inform the setting item that +// a new value has been selected +// --------------------------------------------------------------------------- +// +void CCamLocationSettingPage::SelectCurrentItemL() + { + iQueryValue.SetCurrentValueIndex( iLocationContainer->SelectedValue() ); + } + +// --------------------------------------------------------------------------- +// CCamLocationSettingPage::ConstructFromResourceL +// Constructs the quality container from the resource file +// --------------------------------------------------------------------------- +// +void CCamLocationSettingPage::ConstructFromResourceL( TResourceReader& aReader ) + { + // setting page window is created in the base class + CAknSettingPage::ConstructFromResourceL( aReader ); + + TResourceReader reader; + iLocationContainer->ConstructFromResourceL( reader ); + } + +// --------------------------------------------------------------------------- +// CCamLocationSettingPage::CountComponentControls +// Returns the number of component controls +// --------------------------------------------------------------------------- +// +TInt CCamLocationSettingPage::CountComponentControls() const + { + return 1; // the location container + } + +// --------------------------------------------------------------------------- +// CCamLocationSettingPage::ComponentControl +// Returns the control at the given index +// --------------------------------------------------------------------------- +// +CCoeControl* CCamLocationSettingPage::ComponentControl( TInt /*aIndex*/ ) const + { + return iLocationContainer; + } + +// --------------------------------------------------------------------------- +// CCamLocationSettingPage::Draw +// Draws the setting page +// --------------------------------------------------------------------------- +// +void CCamLocationSettingPage::Draw( const TRect& /*aRect*/ ) const + { + CWindowGc& gc = SystemGc(); + gc.SetPenStyle( CGraphicsContext::ENullPen ); + gc.SetBrushColor( KRgbWhite ); + gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + gc.DrawRect( Rect() ); + } + +// --------------------------------------------------------------------------- +// CCamLocationSettingPage::SizeChanged +// Handles a change in the size of the page +// --------------------------------------------------------------------------- +// +void CCamLocationSettingPage::SizeChanged() + { + CAknSettingPage::SizeChanged(); + + if ( CamUtility::IsNhdDevice() ) + { + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + AknLayoutUtils::LayoutControl( iLocationContainer, Rect(), AknLayoutScalable_Apps::main_cam_set_pane_g1( 7 ) ); + } + else + { + AknLayoutUtils::LayoutControl( iLocationContainer, Rect(), AknLayoutScalable_Apps::main_cam_set_pane_g1( 8 ) ); + } + } + else + { + AknLayoutUtils::LayoutControl( iLocationContainer, Rect(), AknLayoutScalable_Apps::main_cam6_set_pane( 0 ) ); + } + } + +// --------------------------------------------------------------------------- +// CCamLocationSettingPage::OfferKeyEventL +// Handles the key event +// --------------------------------------------------------------------------- +// +TKeyResponse CCamLocationSettingPage::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 iLocationContainer->OfferKeyEventL( aKeyEvent, aType ); + } + +// --------------------------------------------------------------------------- +// CCamLocationSettingPage::PreviewSettingChangeL +// Previews the setting value +// --------------------------------------------------------------------------- +// +TInt CCamLocationSettingPage::PreviewSettingChange( TAny* aAny ) + { + CCamLocationSettingPage* settingPage = + static_cast( aAny ); + // preview the setting value - will + // update the engine and the navi couner + TRAPD( ignore, settingPage->iController.PreviewSettingChangeL( + settingPage->iSettingItemId, + settingPage->iCurrentVal ) ); + if(ignore) + { + // Lint error removal + } + + // cancel the timer + settingPage->iTimer->Cancel(); + + return KErrNone; + } +//End of File