--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/GsCamcorderPlugin/src/CamLocationSettingPage.cpp Thu Jan 07 16:18:56 2010 +0200
@@ -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 <gscamerapluginrsc.rsg>
+#include <aknsettingitemlist.h>
+#include <barsread.h>
+#include "CamUtility.h"
+#include "CamLocationSettingPage.h"
+#include "MCamAppController.h"
+#include "CamLocationSettingContainer.h"
+#include <aknlayoutscalable_apps.cdl.h>
+#include <layoutmetadata.cdl.h>
+
+// 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<CCamLocationSettingPage*>( 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