diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/Application/src/CPbk2SettingsView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/Application/src/CPbk2SettingsView.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,310 @@ +/* +* Copyright (c) 2005-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: Phonebook 2 settings application view. +* +*/ + + +// INCLUDE FILES +#include "CPbk2SettingsView.h" + +// Phonebook 2 +#include "CPbk2AppUi.h" +#include "CPbk2Document.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// System includes +#include +#include // CAknNavigationDecorator + +// Debugging headers +#include + +// -------------------------------------------------------------------------- +// CPbk2SettingsView::CPbk2SettingsView +// -------------------------------------------------------------------------- +// +CPbk2SettingsView::CPbk2SettingsView() + { + } + +// -------------------------------------------------------------------------- +// CPbk2SettingsView::~CPbk2SettingsView +// -------------------------------------------------------------------------- +// +CPbk2SettingsView::~CPbk2SettingsView() + { + Release( iSettingsExtension ); + Release( iSettingsControlExtension ); + } + +// -------------------------------------------------------------------------- +// CPbk2SettingsView::NewL +// -------------------------------------------------------------------------- +// +CPbk2SettingsView* CPbk2SettingsView::NewL() + { + CPbk2SettingsView* self = new ( ELeave ) CPbk2SettingsView(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// -------------------------------------------------------------------------- +// CPbk2SettingsView::ConstructL +// -------------------------------------------------------------------------- +// +inline void CPbk2SettingsView::ConstructL() + { + BaseConstructL( R_PHONEBOOK2_SETTINGS_APPVIEW ); + } + +// -------------------------------------------------------------------------- +// CPbk2SettingsView::HandleCommandL +// -------------------------------------------------------------------------- +// +void CPbk2SettingsView::HandleCommandL( TInt aCommandId ) + { + if ( !iSettingsExtension->HandleCommandL( aCommandId ) ) + { + switch ( aCommandId ) + { + case EAknSoftkeyBack: // FALLTHROUGH + case EPbk2CmdOpenPreviousView: + { + CPbk2ViewState* state = ViewStateLC(); + // To be sure that there is a view uid available. + // In some rare cases there is no view uid. + if ( iPreviousViewId.iAppUid == TUid::Uid( 0 ) && + iPreviousViewId.iViewUid == TUid::Uid( 0 ) ) + { + Pbk2AppUi()->Pbk2ViewExplorer()->ActivatePreviousViewL + ( state ); + } + else + { + Pbk2AppUi()->Pbk2ViewExplorer()->ActivatePhonebook2ViewL + ( iPreviousViewId.iViewUid, state ); + } + CleanupStack::PopAndDestroy(state); + break; + } + case EPbk2CmdEditSetting: + { + iControl->EditItemL( + iControl->ListBox()->CurrentItemIndex(), ETrue ); + break; + } + case EAknCmdHelp: + { + // Help does not need uiControl so we fake it, + // then we can use commandhandler for help + CPbk2ContactUiControlSubstitute* uiControlSubstitute = + CPbk2ContactUiControlSubstitute::NewL(); + CleanupStack::PushL( uiControlSubstitute ); + + Pbk2AppUi()->ApplicationServices().CommandHandlerL()-> + HandleCommandL + ( aCommandId, *uiControlSubstitute, this ); + CleanupStack::PopAndDestroy( uiControlSubstitute ); + break; + } + default: + { + AppUi()->HandleCommandL( aCommandId ); + break; + } + }; + } + } + +// -------------------------------------------------------------------------- +// CPbk2SettingsView::DynInitMenuPaneL +// -------------------------------------------------------------------------- +// +void CPbk2SettingsView::DynInitMenuPaneL + ( TInt aResourceId, CEikMenuPane* aMenuPane ) + { + iSettingsExtension->DynInitMenuPaneL( aResourceId, aMenuPane ); + } + +// -------------------------------------------------------------------------- +// CPbk2SettingsView::Id +// -------------------------------------------------------------------------- +// +TUid CPbk2SettingsView::Id() const + { + return Phonebook2::KPbk2SettingsViewUid; + } + +// -------------------------------------------------------------------------- +// CPbk2SettingsView::HandleStatusPaneSizeChange +// -------------------------------------------------------------------------- +// +void CPbk2SettingsView::HandleStatusPaneSizeChange() + { + // Resize the container to fill the client rectangle + if ( iContainer ) + { + iContainer->SetRect( ClientRect() ); + } + } + +// -------------------------------------------------------------------------- +// CPbk2SettingsView::DoActivateL +// -------------------------------------------------------------------------- +// +void CPbk2SettingsView::DoActivateL( const TVwsViewId& aPrevViewId, + TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/ ) + { + PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING + ("CPbk2SettingsView(%x)::DoActivateL()"), this ); + + if ( !iSettingsExtension ) + { + iSettingsExtension = + Pbk2AppUi()->PhonebookDocument()->ExtensionManager().FactoryL()-> + CreatePbk2SettingsViewExtensionL + ( Pbk2AppUi()->ApplicationServices().ContactManager() ); + } + + HBufC* title = StringLoader::LoadLC( R_PHOB_SET_TITLE ); + + MPbk2ViewActivationTransaction* viewActivationTransaction = + Pbk2AppUi()->Pbk2ViewExplorer()->HandleViewActivationLC + ( Id(), aPrevViewId, title, NULL, + Phonebook2::EUpdateNaviPane | Phonebook2::EUpdateTitlePane | + Phonebook2::EUpdateContextPane ); + + CreateControlsL(); + + // Create empty navigation pane + if (!iNaviPane) + { + iNaviPane = static_cast( + iAvkonAppUi->StatusPane()->ControlL( + TUid::Uid(EEikStatusPaneUidNavi))); + } + if ( !iNaviDecorator ) + { + iNaviDecorator = iNaviPane->CreateNavigationLabelL(); + iNaviPane->PushL(*iNaviDecorator); + } + + // Transaction is commited after all leaving code has been executed + viewActivationTransaction->Commit(); + CleanupStack::PopAndDestroy( 2 ); // viewActivationTransaction, title + + iContainer->SetHelpContext( TCoeHelpContext( ApplicationUid(), + KPHOB_HLP_SETTINGS )); + + iPreviousViewId = aPrevViewId; + } + +// -------------------------------------------------------------------------- +// CPbk2SettingsView::DoDeactivate +// -------------------------------------------------------------------------- +// +void CPbk2SettingsView::DoDeactivate() + { + PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING + ("CPbk2SettingsView(%x)::DoDeactivate()"), this ); + + if (iNaviPane && iNaviDecorator) + { + iNaviPane->Pop(iNaviDecorator); + } + delete iNaviDecorator; + iNaviDecorator = NULL; + + if ( iContainer ) + { + AppUi()->RemoveFromStack( iContainer ); + delete iContainer; + iContainer = NULL; + } + + Release( iSettingsExtension ); + iSettingsExtension = NULL; + Release( iSettingsControlExtension ); + iSettingsControlExtension = NULL; + } + +// -------------------------------------------------------------------------- +// CPbk2SettingsView::GetViewSpecificMenuFilteringFlagsL +// -------------------------------------------------------------------------- +// +TInt CPbk2SettingsView::GetViewSpecificMenuFilteringFlagsL() const + { + return 0; + } + +// -------------------------------------------------------------------------- +// CPbk2SettingsView::CreateControlsL +// -------------------------------------------------------------------------- +// +inline void CPbk2SettingsView::CreateControlsL() + { + if ( !iSettingsControlExtension ) + { + iSettingsControlExtension = + iSettingsExtension->CreatePbk2SettingsControlExtensionL(); + } + + if ( !iContainer ) + { + // Create the container and control + CContainer* container = CContainer::NewLC( this, NULL, *this ); + + container->SetHelpContext + ( TCoeHelpContext( ApplicationUid(), KPHOB_HLP_SETTINGS ) ); + + CPbk2SettingsListControl* control = CPbk2SettingsListControl::NewL + ( container, + Pbk2AppUi()->ApplicationServices().SortOrderManager(), + *iSettingsControlExtension ); + CleanupStack::PushL( control ); + + container->SetControl( control, ClientRect() ); // takes ownership + CleanupStack::Pop( control ); + + container->SetMopParent( this ); + container->MakeVisible( ETrue ); + + AppUi()->AddToStackL( *this, container ); + CleanupStack::Pop( container ); + iContainer = container; + iControl = control; + + container->ActivateL(); + } + } + +// End of File