diff -r 000000000000 -r 1ddebce53859 camerauis/cameraapp/generic/src/CamContextAwareSettingPage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/src/CamContextAwareSettingPage.cpp Thu Jan 07 16:18:56 2010 +0200 @@ -0,0 +1,182 @@ +/* +* 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 CAknEnumeratedItems.* +*/ + + + +// INCLUDE FILES +#include +#include "CamContextAwareSettingPage.h" +#include "CamAppController.h" +#include "CamAppUiBase.h" +#include "camlogging.h" + +// CONSTANTS + + +// ============================ MEMBER FUNCTIONS =============================== +// --------------------------------------------------------------------------- +// CCamContextAwareSettingPage::CCamContextAwareSettingPage +// C++ constructor +// --------------------------------------------------------------------------- +// +CCamContextAwareSettingPage::CCamContextAwareSettingPage( + const TDesC* aSettingText, + TInt aSettingNumber, + TInt aControlType, + TInt aEditorResourceId, + TInt aSettingPageResourceId, + MAknQueryValue& aQueryValue, + CAknEnumeratedTextPopupSettingItem& aParent, + CCamAppController& aController ) + : CAknPopupSettingPage( aSettingText, aSettingNumber, aControlType, + aEditorResourceId, aSettingPageResourceId, aQueryValue ), + iParent( aParent ), iController( aController ) + { + } + +/** +* Destructor +*/ +CCamContextAwareSettingPage::~CCamContextAwareSettingPage() + { + PRINT( _L("Camera => ~CCamContextAwareSettingPage") ); + if ( iTimer ) + { + iTimer->Cancel(); + delete iTimer; + } + + TRAP_IGNORE( iController.CancelPreviewChangesL() ); + PRINT( _L("Camera <= ~CCamContextAwareSettingPage") ); + } + +// --------------------------------------------------------------------------- +// CCamContextAwareSettingPage::ConstructL +// Construct the setting page +// --------------------------------------------------------------------------- +// +void CCamContextAwareSettingPage::ConstructL() + { + CAknPopupSettingPage::ConstructL(); + // create the timer used for callbacks + iTimer = CPeriodic::NewL( CActive::EPriorityStandard ); + } + +// --------------------------------------------------------------------------- +// CCamContextAwareSettingPage::PostDisplayCheckL +// Pushes the navicounter onto the navipane, and then calls the base class +// PostDisplayCheckL() +// --------------------------------------------------------------------------- +// +TBool CCamContextAwareSettingPage::PostDisplayCheckL() + { + // This appears to be the best place to push the navicounter, + // so that it overwrites the navipane created by the + // CAknSettinPage::ExecuteLD() + CCamAppUiBase* appUi = (CCamAppUiBase*)iEikonEnv->EikAppUi(); + appUi->PushNaviPaneCounterL(); + + return CAknPopupSettingPage::PostDisplayCheckL(); + } + +// --------------------------------------------------------------------------- +// CCamContextAwareSettingPage::UpdateSettingL +// Called when the state of the list box changes. +// --------------------------------------------------------------------------- +// +void CCamContextAwareSettingPage::UpdateSettingL() + { + // Determine whether the currently highlighted list item + // is enabled or not, and update the cba. + // ...Get the current list item index. + TInt currentIndex = ListBoxControl()->View()->CurrentItemIndex(); + // ...Dertemine the settings model id associated with the current + // ...list item. + iCurrentVal = iParent.EnumeratedTextArray()-> + At( currentIndex )->EnumerationValue(); + // ...Determine whether the settings model value is enabled or disabled. + TBool settingValueEnabled = + iController.SettingValueEnabled( iParent.Identifier(), iCurrentVal ); + // ...Inform the base setting page class, and update the cba + SetDataValidity( settingValueEnabled ); + UpdateCbaL(); + + // If the list item is enabled update the navi-pane to + // let the user know how this item would affect the available photo + // counter. + if ( settingValueEnabled ) + { + if ( iTimer->IsActive() ) + { + iTimer->Cancel(); + } + iTimer->Start( 0, 0, TCallBack( PreviewSettingChange, this ) ); + } + } + +// --------------------------------------------------------------------------- +// CCamContextAwareSettingPage::ProcessCommandL +// Processes events from the softkeys. +// --------------------------------------------------------------------------- +// +void CCamContextAwareSettingPage::ProcessCommandL(TInt aCommandId) + { + HideMenu(); + + // Respond to softkey events + switch (aCommandId) + { + case EAknSoftkeyOk: + case EAknSoftkeySelect: + SelectCurrentItemL(); // has non-trivial implementations in listbox type + // controls to put the selection on the current item + AttemptExitL( ETrue ); + iController.CommitPreviewChanges(); + break; + case EAknSoftkeyCancel: + AttemptExitL( EFalse ); + iController.CancelPreviewChangesL(); + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// CCamContextAwareSettingPage::PreviewSettingChangeL +// Previews the setting value +// --------------------------------------------------------------------------- +// +TInt CCamContextAwareSettingPage::PreviewSettingChange( TAny* aAny ) + { + CCamContextAwareSettingPage* settingPage = + static_cast( aAny ); + + // preview the setting value - will + // update the engine and the navi couner + TRAPD( ignore, settingPage->iController.PreviewSettingChangeL( + settingPage->iParent.Identifier(), settingPage->iCurrentVal ) ); + + if(ignore) + { + // Lint error removal + } + + // cancel the timer + settingPage->iTimer->Cancel(); + + return KErrNone; + }