diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/Application/src/CPbk2ViewExplorer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/Application/src/CPbk2ViewExplorer.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,267 @@ +/* +* 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 view explorer. +* +*/ + + +// INCLUDE FILES +#include "CPbk2ViewExplorer.h" + +// Phonebook 2 +#include "CPbk2ViewActivationTransaction.h" +#include "CPbk2ViewState.h" +#include "CPbk2AppViewFactory.h" +#include "CPbk2AppUi.h" +#include "CPbk2Document.h" +#include +#include +#include +#include +#include +#include +#include +#include + +// System includes +#include +#include +#include +#include + +// Debugging headers +#include +#include + + +/// Unnamed namespace for local definitions +namespace { + +#ifdef _DEBUG + +enum TPanicCode + { + EPanicPreCond_ConstructL = 1, + EPanicPostCond_ConstructL, + }; + +void Panic(TPanicCode aReason) + { + _LIT( KPanicText, "CPbk2ViewExplorer" ); + User::Panic( KPanicText, aReason ); + } + +#endif // _DEBUG + +} /// namespace + + +// -------------------------------------------------------------------------- +// CPbk2ViewExplorer::CPbk2ViewExplorer +// -------------------------------------------------------------------------- +// +CPbk2ViewExplorer::CPbk2ViewExplorer( CPbk2AppUi& aAppUi ) : + iAppUi( aAppUi ) + { + } + +// -------------------------------------------------------------------------- +// CPbk2ViewExplorer::~CPbk2ViewExplorer +// -------------------------------------------------------------------------- +// +CPbk2ViewExplorer::~CPbk2ViewExplorer() + { + delete iViewGraph; + } + +// -------------------------------------------------------------------------- +// CPbk2ViewExplorer::NewL +// -------------------------------------------------------------------------- +// +CPbk2ViewExplorer* CPbk2ViewExplorer::NewL( CPbk2AppUi& aAppUi ) + { + CPbk2ViewExplorer* self = + new ( ELeave ) CPbk2ViewExplorer( aAppUi ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// -------------------------------------------------------------------------- +// CPbk2ViewExplorer::ConstructL +// -------------------------------------------------------------------------- +// +void CPbk2ViewExplorer::ConstructL() + { + PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING + ("CPbk2ViewExplorer::ConstructL(0x%x)"), this); + + __ASSERT_DEBUG( !iViewGraph, Panic( EPanicPreCond_ConstructL ) ); + + // Create UI elements + PBK2_PROFILE_START(Pbk2Profile::EViewExplorerConstructionReadViewGraph); + // Read view graph from resources and apply + // UI extension view graph changes + ReadViewGraphL(); + PBK2_PROFILE_END(Pbk2Profile::EViewExplorerConstructionReadViewGraph); + + __ASSERT_DEBUG( iViewGraph , Panic( EPanicPostCond_ConstructL ) ); + + PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING + ("CPbk2ViewExplorer::ConstructL end")); + } + +// -------------------------------------------------------------------------- +// CPbk2ViewExplorer::CreateViewsL +// -------------------------------------------------------------------------- +// +void CPbk2ViewExplorer::CreateViewsL() + { + PBK2_PROFILE_START(Pbk2Profile::EViewExplorerCreateAppViewFactory); + CPbk2AppViewFactory* factory = CPbk2AppViewFactory::NewLC( iAppUi ); + PBK2_PROFILE_END(Pbk2Profile::EViewExplorerCreateAppViewFactory); + + // Create and add application views + for (TInt i = 0; i < iViewGraph->Count(); ++i) + { + const CPbk2ViewNode& viewNode = (*iViewGraph)[i]; + if (!viewNode.ExitNode()) + { + PBK2_PROFILE_START(Pbk2Profile::EViewExplorerCreateAppView); + CAknView* view = factory->CreateAppViewLC( viewNode.ViewId() ); + PBK2_PROFILE_END(Pbk2Profile::EViewExplorerCreateAppView); + + PBK2_PROFILE_START(Pbk2Profile::EViewExplorerAddView); + iAppUi.AddViewL( view ); + PBK2_PROFILE_END(Pbk2Profile::EViewExplorerAddView); + CleanupStack::Pop( view ); + } + } + CleanupStack::PopAndDestroy( factory ); + } + +// -------------------------------------------------------------------------- +// CPbk2ViewExplorer::IsPhonebook2View +// -------------------------------------------------------------------------- +// +TBool CPbk2ViewExplorer::IsPhonebook2View + ( const TVwsViewId& aViewId ) const + { + TBool ret = EFalse; + + if ( aViewId.iAppUid == iAppUi.Application()->AppDllUid() ) + { + const CPbk2ViewNode* viewNode = iViewGraph->FindNodeWithViewId + ( aViewId.iViewUid ); + ret = viewNode && !viewNode->ExitNode(); + } + + return ret; + } + +// -------------------------------------------------------------------------- +// CPbk2ViewExplorer::ActivatePhonebook2ViewL +// -------------------------------------------------------------------------- +// +void CPbk2ViewExplorer::ActivatePhonebook2ViewL + (TUid aViewId, const CPbk2ViewState* aViewState ) const + { + if ( aViewState ) + { + HBufC8* stateBuf = aViewState->PackLC(); + iAppUi.ActivateLocalViewL + ( aViewId, CPbk2ViewState::Uid(), *stateBuf ); + CleanupStack::PopAndDestroy(); // stateBuf + } + else + { + iAppUi.ActivateLocalViewL( aViewId ); + } + } + +// -------------------------------------------------------------------------- +// CPbk2ViewExplorer::ActivatePreviousViewL +// -------------------------------------------------------------------------- +// +void CPbk2ViewExplorer::ActivatePreviousViewL + ( const CPbk2ViewState* aViewState ) + { + // Find current view in the graph + CPbk2ViewNode* viewNode = + iViewGraph->FindNodeWithViewId( iAppUi.ActiveView()->Id() ); + + if ( viewNode ) + { + // Get previous node + CPbk2ViewNode* prevNode = viewNode->PreviousNode(); + if ( !prevNode ) + { + prevNode = viewNode->DefaultPreviousNode(); + } + if ( prevNode ) + { + if ( prevNode->ExitNode() ) + { + iAppUi.ExitL(); + } + else + { + ActivatePhonebook2ViewL( prevNode->ViewId(), aViewState ); + } + } + } + } + +// -------------------------------------------------------------------------- +// CPbk2ViewExplorer::HandleViewActivationLC +// -------------------------------------------------------------------------- +// +MPbk2ViewActivationTransaction* CPbk2ViewExplorer::HandleViewActivationLC + ( const TUid& aViewId, const TVwsViewId& aPrevViewId, + const TDesC* aTitlePaneText, const CEikImage* aContextPanePicture, + TUint aFlags ) + { + // Create and return an instance of view activation transaction + return CPbk2ViewActivationTransaction::NewLC + ( iAppUi, *this, aViewId, aPrevViewId, aTitlePaneText, + aContextPanePicture, aFlags ); + } + +// -------------------------------------------------------------------------- +// CPbk2ViewExplorer::ViewGraph +// -------------------------------------------------------------------------- +// +CPbk2ViewGraph& CPbk2ViewExplorer::ViewGraph() const + { + return *iViewGraph; + } + +// -------------------------------------------------------------------------- +// CPbk2ViewExplorer::ReadViewGraphL +// Loads view navigation graph from resources. +// -------------------------------------------------------------------------- +// +void CPbk2ViewExplorer::ReadViewGraphL() + { + TResourceReader reader; + CCoeEnv::Static()->CreateResourceReaderLC( reader, R_PBK2_VIEWNODES ); + iViewGraph = CPbk2ViewGraph::NewL( reader ); + CleanupStack::PopAndDestroy(); // reader + + iAppUi.PhonebookDocument()->ExtensionManager(). + ApplyExtensionViewGraphChangesL( *iViewGraph ); + } + +// End of File