diff -r 1fc85118c3ae -r 870918037e16 locationlandmarksrefappfors60/Src/LandmarksAppUi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationlandmarksrefappfors60/Src/LandmarksAppUi.cpp Wed Sep 01 12:31:27 2010 +0100 @@ -0,0 +1,265 @@ +/* +* Copyright (c) 2004-2005 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: Implements the CLandmarksAppUi class +* +*/ + + + +#include + +#include +#include +#include +#include + +#include "LmRefApp.hrh" +#include +#include "LandmarksAppUi.h" +#include "LandmarksView.h" +#include "LandmarksCategoriesView.h" +#include "LandmarksInfoView.h" +#include "LandmarksApplicationEngine.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +CLandmarksAppUi::CLandmarksAppUi() + { + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void CLandmarksAppUi::ConstructL() + { + BaseConstructL(EAknEnableSkin); + + // Fetch pointer to the status pane. + CEikStatusPane* statusPane = StatusPane(); + + // Fetch pointer to the default navi pane control. + CAknNavigationControlContainer* naviPane = + (CAknNavigationControlContainer*) statusPane->ControlL( + TUid::Uid(EEikStatusPaneUidNavi)); + + // Initialise the nave decorator that visualizes the tabs and navi arrows. + iNaviDecorator = naviPane->ResourceDecorator(); + CAknTabGroup* tabGroup = + static_cast(iNaviDecorator->DecoratedControl()); + tabGroup->SetObserver(this); + + // Create and init the application engine. + iEngine = CLandmarksApplicationEngine::NewL(); + + // Initialize the default landmark database if necessary. + if (iEngine->StartInitializeDbIfNecessaryL(this)) + { + LaunchProgressDialogL(); + } + else + { + // Db is already initialized - OK to construct views. + PostConstructL(); + } + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +CLandmarksAppUi::~CLandmarksAppUi() + { + delete iNaviDecorator; + + // Cannot delete iEngine here since it is needed when deactivating views. + iEngine = NULL; + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void CLandmarksAppUi::HandleCommandL(TInt aCommand) + { + switch(aCommand) + { + case EEikCmdExit: + case EAknSoftkeyExit: + if (iProgressDialog) + { + // The progress dialog has been dismissed but not yet deleted. + // iProgressDialog->ProcessFinishedL() deletes the progress + // dialog asynchronously. If the app is exited before the + // dialog is deleted, a Cone 8 panic will occur. + // Thus, iProgressDialog must be deleted explicitely here. + delete iProgressDialog; + iProgressDialog = NULL; + } + Exit(); + break; + default: + break; + } + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +TKeyResponse CLandmarksAppUi::HandleKeyEventL( + const TKeyEvent& aKeyEvent,TEventCode aType) + { + // Offer arrow keys to CAknTabGroup, it then calculates new active tab + // and later calls our TabChangedL() -method with correct new tab index. + + CAknTabGroup* tabGroup = + static_cast (iNaviDecorator->DecoratedControl()); + + if (tabGroup && + (aKeyEvent.iCode == EKeyLeftArrow || aKeyEvent.iCode == EKeyRightArrow)) + { + return tabGroup->OfferKeyEventL(aKeyEvent, aType); + } + + return EKeyWasNotConsumed; + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +void CLandmarksAppUi::HandleResourceChangeL( TInt aType ) + { + CAknAppUi::HandleResourceChangeL( aType ); + + CLandmarksView* lmView = ( CLandmarksView* ) View( TUid::Uid( ELandmarksViewId ) ); + if ( lmView ) + { + lmView->HandleResourceChange( aType ); + } + + CLandmarksCategoriesView* catView = ( CLandmarksCategoriesView* ) View( TUid::Uid( ELandmarksCategoriesViewId ) ); + if ( catView ) + { + catView->HandleResourceChange( aType ); + } + + CLandmarksInfoView* infoView = ( CLandmarksInfoView* ) View( TUid::Uid( ELandmarksInfoViewId ) ); + if ( infoView ) + { + infoView->HandleResourceChange( aType ); + } + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void CLandmarksAppUi::TabChangedL(TInt aIndex) + { + switch (aIndex) + { + case 0: + ActivateLocalViewL(TUid::Uid(ELandmarksViewId)); + break; + case 1: + ActivateLocalViewL(TUid::Uid(ELandmarksCategoriesViewId)); + break; + default: + break; + } + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void CLandmarksAppUi::NotifyOperationProgressL( + TOperation aOperation, + TInt aProgress, + TInt aErrorCode) + { + if (aOperation == EInitializeDb) + { + // Update Progressbar + CEikProgressInfo* progressBar = iProgressDialog->GetProgressInfoL(); + progressBar->SetAndDraw(aProgress); + + if (aErrorCode == KErrNone) // Db initialization ready. + { + // Dismiss dialog. + iProgressDialog->ProcessFinishedL(); + + // Continue with construction + PostConstructL(); + } + } + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void CLandmarksAppUi::PostConstructL() + { + // Create landmarks view + CLandmarksView* landmarksView = + CLandmarksView::NewLC(iNaviDecorator, *iEngine); + AddViewL(landmarksView); // Transfer ownership to base class + CleanupStack::Pop(landmarksView); + + // Create categories view + CLandmarksCategoriesView* categoriesView = + CLandmarksCategoriesView::NewLC(iEngine); // ownership is transferred + AddViewL(categoriesView); // Transfer ownership to base class + CleanupStack::Pop(categoriesView); + + // Create landmark info view + CLandmarksInfoView* infoView = + CLandmarksInfoView::NewLC(iNaviDecorator, *iEngine); + AddViewL(infoView); // Transfer ownership to base class + CleanupStack::Pop(infoView); + + // Activate landmarks view + landmarksView->ActivateViewL(landmarksView->ViewId()); + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void CLandmarksAppUi::DialogDismissedL(TInt /*aButtonId*/) + { + iProgressDialog = NULL; + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void CLandmarksAppUi::LaunchProgressDialogL() + { + // Initialize dialog + TBool showImmediately(ETrue); + iProgressDialog = new (ELeave) CAknProgressDialog( + reinterpret_cast (&iProgressDialog), showImmediately); + iProgressDialog->PrepareLC(R_LMREFAPP_INIT_DB_PROGRESS_DIALOG); + iProgressDialog->SetCallback(this); + + // Initialize progress bar. + CEikProgressInfo* progressBar = iProgressDialog->GetProgressInfoL(); + const TInt KFinalProgressValue = 100; // 100% done when ready + progressBar->SetFinalValue(KFinalProgressValue); + + // Launch the prepared dialog. + iProgressDialog->RunLD(); + + // Draw the progress bar + progressBar->IncrementAndDraw(0); + } +