--- a/mapnavproviderrefapp/src/mnrpappui.cpp Tue Feb 02 00:16:03 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,492 +0,0 @@
-/*
-* Copyright (c) 2006-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: CMnrpAppUi class implementation
-*
-*/
-
-
-#include <aknnavi.h>
-#include <aknnavide.h>
-#include <eikbtgpc.h>
-
-#include <AknIconUtils.h>
-#include <aknselectionlist.h>
-#include <gulicon.h>
-
-#include <mnrefprovider.rsg>
-#include <MnRefProvider.mbg>
-#include "mnrp.hrh"
-
-#include <EPos_CPosLandmark.h>
-#include <EPos_CPosLandmarkDatabase.h>
-
-#include "mnrpappview.h"
-#include "mnrpnaviview.h"
-#include "mnrpmapview.h"
-
-#include "mnrpmapviewservice.h"
-#include "mnrpnavigationservice.h"
-
-#include "mnrpdocument.h"
-#include "mnrpengine.h"
-#include "mnrpappui.h"
-#include "mnrputils.h"
-#include "debug.h"
-
-const TInt KDefaultLmIconIndex = 0;
-_LIT( KMbmFile, "\\resource\\apps\\MnRefProvider.mbm");
-
-// ============================ LOCAL FUNCTIONS ===============================
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void CleanupIconArray( TAny* aArray )
- {
- LOG("MnRefProvider::CleanupIconArray in");
- ( ( CArrayPtrSeg<CGulIcon>* ) aArray)->ResetAndDestroy();
- delete aArray;
- LOG("MnRefProvider::CleanupIconArray out");
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void AddIconL(
- CArrayPtr<CGulIcon>& aIconArray,
- const TDesC& aFileName,
- TInt aIconIndex,
- TInt aMaskIndex )
- {
- LOG("MnRefProvider::AddIconL in");
- CFbsBitmap* icon = NULL;
- CFbsBitmap* mask = NULL;
-
- AknIconUtils::CreateIconLC( icon, mask, aFileName, aIconIndex, aMaskIndex );
- CGulIcon* gul = CGulIcon::NewL( icon, mask );
-
- gul->SetBitmapsOwnedExternally( EFalse );
- CleanupStack::PushL( gul );
- aIconArray.AppendL( gul );
- CleanupStack::Pop( 3 ); // gul, icon & mask
- LOG("MnRefProvider::AddIconL out");
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-CArrayPtrSeg<CGulIcon>* CreateIconListLC( TInt aGranularity )
- {
- CArrayPtrSeg<CGulIcon>* iconList =
- new (ELeave) CArrayPtrSeg<CGulIcon>( aGranularity );
- CleanupStack::PushL( TCleanupItem( CleanupIconArray, iconList ) );
-
- AddIconL(
- *iconList,
- KMbmFile,
- EMbmMnrefproviderDefault_lm,
- EMbmMnrefproviderDefault_lm_mask);
-
- return iconList;
- }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void AddLandmarkL(
- const CPosLandmark& aLandmark,
- CDesCArray& aTextArray,
- CArrayPtr<CGulIcon>& aIconArray )
- {
- TPtrC name;
- aLandmark.GetLandmarkName( name );
-
- HBufC* printableName = MnrpUtils::PrintableStringLC( name );
-
- TPtrC iconFile;
- TInt iconIndex, maskIndex, iconArrayIndex;
-
- if ( aLandmark.GetIcon( iconFile, iconIndex, maskIndex ) == KErrNone )
- {
- AddIconL( aIconArray, iconFile, iconIndex, maskIndex );
- iconArrayIndex = aIconArray.Count() - 1;
- }
- else
- {
- iconArrayIndex = KDefaultLmIconIndex;
- }
-
- _LIT(KListItemFormat, "%d\t%S\t\t");
- const TInt KListItemMinSize = 20;
-
- HBufC* item = HBufC::NewLC( printableName->Size() + KListItemMinSize );
- item->Des().Format( KListItemFormat, iconArrayIndex, printableName );
-
- aTextArray.AppendL( *item );
-
- CleanupStack::PopAndDestroy( item );
- CleanupStack::PopAndDestroy( printableName );
- }
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-CMnrpAppUi::CMnrpAppUi( CMnrpEngine& aEngine )
- : iEngine( aEngine )
- {
- }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnrpAppUi::ConstructL()
- {
- BaseConstructL( EAknEnableSkin );
-
- // This is empty view, it will be shown by UI framework,
- // when application starts
- iAppView = CMnrpAppView::NewL();
- AddViewL( iAppView );
-
- if ( !iEikonEnv->StartedAsServerApp() )
- {
- // switch to map view if started normally
- iMapView = CMnrpMapView::NewL( EFalse, iEngine );
- AddViewL( iMapView );
- ActivateLocalViewL( iMapView->Id() );
- }
- }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-CMnrpAppUi::~CMnrpAppUi()
- {
- delete iNaviPaneLabel;
- }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnrpAppUi::HandleCommandL( TInt aCommand )
- {
- switch(aCommand)
- {
- case EAknSoftkeyBack:
- {
- CEikAppServer* server = iEikonEnv->AppServer();
- if ( server )
- {
- server->NotifyServerExit( EEikCmdExit );
- }
- Exit();
- break;
- }
-
- case EEikCmdExit:
- case EAknSoftkeyExit:
- {
- CEikAppServer* server = iEikonEnv->AppServer();
- if ( server )
- {
- server->NotifyServerExit( EAknCmdExit ); // this will close client also
- }
- Exit();
- break;
- }
- default:
- break;
- }
- }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-TBool CMnrpAppUi::IsChainedMode()
- {
- return ( iParentWg != 0 );
- }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-TBool CMnrpAppUi::IsAnyUserViewActive()
- {
- TVwsViewId viewId;
- if ( ( GetActiveViewId( viewId ) == KErrNotFound ) ||
- ( viewId.iViewUid.iUid != EMnrpMapViewId &&
- viewId.iViewUid.iUid != EMnrpNavigationViewId ) )
- {
- return EFalse;
- }
- else
- {
- return ETrue;
- }
- }
-
-// ----------------------------------------------------------------------------
-// ----------------------------------------------------------------------------
-//
-void CMnrpAppUi::SetNaviPaneTitleL( const TDesC& aPaneTitle )
- {
- if ( !iNaviPane )
- {
- iNaviPane = static_cast<CAknNavigationControlContainer*>(
- StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
- }
-
- if ( iNaviPaneLabel )
- {
- CAknNavigationDecorator* naviLabel = iNaviPane->CreateNavigationLabelL( aPaneTitle );
- CleanupStack::PushL( naviLabel );
-
- iNaviPane->ReplaceL( *iNaviPaneLabel, *naviLabel );
-
- delete iNaviPaneLabel;
- iNaviPaneLabel = naviLabel;
-
- CleanupStack::Pop( naviLabel );
- }
- else
- {
- iNaviPaneLabel = iNaviPane->CreateNavigationLabelL( aPaneTitle );
- iNaviPane->PushL( *iNaviPaneLabel );
- }
- }
-
-// ----------------------------------------------------------------------------
-// ----------------------------------------------------------------------------
-//
-void CMnrpAppUi::SetRightSoftkeyCommandL( TInt aCommand, const TDesC& aButtonTitle )
- {
- if ( Cba() )
- {
- Cba()->SetCommandL( 1, aCommand, aButtonTitle );
- }
- }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-TBool CMnrpAppUi::ProcessCommandParametersL( CApaCommandLine &aCommandLine )
- {
- iParentWg = aCommandLine.ParentWindowGroupID();
- LOG1("parent window group id %d", iParentWg );
-
- return CAknAppUi::ProcessCommandParametersL( aCommandLine );
- }
-
-// ----------------------------------------------------------------------------
-// ----------------------------------------------------------------------------
-//
-void CMnrpAppUi::HandleResourceChangeL( TInt aType )
- {
- CAknAppUi::HandleResourceChangeL( aType );
-
- TRect rect( ClientRect() );
- if ( Cba() )
- {
- Cba()->SetBoundingRect( TRect() );
- Cba()->ReduceRect( rect );
- }
- }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnrpAppUi::ShowMapL( CMnrpMapViewService& aService )
- {
- if ( !iMapView )
- {
- iMapView = CMnrpMapView::NewL( IsChainedMode(), iEngine );
- AddViewL( iMapView );
- }
-
- iMapView->SetMapModeL( aService );
- ActivateLocalViewL( iMapView->Id() );
- }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnrpAppUi::ShowNavigationL( const CPosLandmark& aDestination )
- {
- if ( !iNaviView )
- {
- iNaviView = CMnrpNaviView::NewL( IsChainedMode(), iEngine );
- AddViewL( iNaviView );
- }
-
- iNaviView->SetDestinationL( aDestination );
- ActivateLocalViewL( iNaviView->Id() );
- }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnrpAppUi::StartSelectionL(
- CMnrpMapViewService& aService,
- MMapSelectionCallback& aCallback )
- {
- SetNaviPaneTitleL( aService.SelectionRequestText() );
-
- if ( aService.Options() & CMnMapView::EOptionRestrictSelection )
- {
- // select from dialog
- SelectFromDialogL( aService, aCallback );
- }
- else
- {
- // select from map
- if ( !iMapView )
- {
- iMapView = CMnrpMapView::NewL( IsChainedMode(), iEngine );
- AddViewL( iMapView );
- }
-
- iMapView->SetSelectionModeL( aService, aCallback );
- ActivateLocalViewL( iMapView->Id() );
- }
- }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnrpAppUi::StopSelection()
- {
- __ASSERT_DEBUG( iMapView, Panic( KErrGeneral ) );
- iMapView->StopSelection();
-
- // Selection is done - close selection view
- TRAP_IGNORE( ActivateLocalViewL( iAppView->Id() ) );
- }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CMnrpAppUi::SelectFromDialogL(
- CMnrpMapViewService& aService,
- MMapSelectionCallback& aCallback )
- {
- LOG("MnRefProvider::SelectFromDialogL in");
-
- const TInt KGranularity = 8;
-
- CDesCArraySeg *textArray = new (ELeave) CDesCArraySeg( KGranularity );
- CleanupStack::PushL( textArray );
- CArrayPtrSeg<CGulIcon>* iconArray = CreateIconListLC( KGranularity );
-
- TInt linkedLmsOffset = 0;
-
- CMnrpDocument* doc = ( CMnrpDocument* ) Document();
- CMnrpEngine& engine = doc->Engine();
-
- // add non-linked landmarks
- LOG("MnRefProvider::DoSelectionDialogL adding non-linked landmarks");
- for ( TInt i = 0; i < aService.LandmarksToShow().Count(); i++)
- {
- const CPosLandmark* lm = aService.LandmarksToShow()[i];
- AddLandmarkL( *lm, *textArray, *iconArray );
- }
-
- // add linked landmarks
- LOG("MnRefProvider::DoSelectionDialogL adding linked landmarks");
-
- // create dictionary of linked landmarks
- // in order to ease searching for return values
- // when completing request
- RArray<TInt> dbIndices;
- RArray<TPosLmItemId> lmIds;
-
- CleanupClosePushL( dbIndices );
- CleanupClosePushL( lmIds );
-
- linkedLmsOffset = textArray->Count();
- for ( TInt db = 0; db < aService.LandmarksToShowDatabases().Count(); db++ )
- {
- const HBufC* uri = aService.LandmarksToShowDatabases()[db];
-
- CPosLandmarkDatabase* lmdb = CPosLandmarkDatabase::OpenL( *uri );
- CleanupStack::PushL( lmdb );
-
- if ( lmdb->IsInitializingNeeded() )
- {
- ExecuteAndDeleteLD( lmdb->InitializeL() );
- }
-
- for ( TInt i = 0; i < aService.LinkedLandmarksToShow(db).Count(); i++)
- {
- TPosLmItemId id = aService.LinkedLandmarksToShow(db)[i];
-
- CPosLandmark* lm = lmdb->ReadLandmarkLC( id );
- AddLandmarkL( *lm, *textArray, *iconArray );
-
- dbIndices.AppendL( db );
- lmIds.AppendL( id );
-
- CleanupStack::PopAndDestroy( lm );
- }
-
- CleanupStack::PopAndDestroy( lmdb );
- }
-
- TInt selected = 0;
- CAknSelectionListDialog *dialog =
- CAknSelectionListDialog::NewL( selected, textArray, R_MNREFPROVIDER_MENUBAR );
-
- dialog->PrepareLC( R_MNREFPROVIDER_SELECTION_DIALOG );
-
- dialog->SetIconArrayL( iconArray );
- CleanupStack::Pop(); // iconArray cleanup
-
- LOG1("MnRefProvider::SelectFromDialogL launching dialog with %d items", textArray->Count() );
- TInt result = dialog->RunLD();
- if ( result )
- {
- LOG("MnRefProvider::SelectFromDialogL approved");
- if ( selected < linkedLmsOffset )
- {
- aCallback.HandleSelectionL( selected );
- }
- else
- {
- TInt linkedLmIndex = selected - linkedLmsOffset;
- if ( linkedLmIndex < dbIndices.Count() &&
- linkedLmIndex < lmIds.Count() )
- {
- aCallback.HandleSelectionL( lmIds[linkedLmIndex], dbIndices[linkedLmIndex] );
- }
- else
- {
- // never happens
- LOG("MnRefProvider::SelectFromDialogL selection out of range, out");
- aCallback.HandleSelectionErrorL( KErrGeneral );
- }
- }
- }
- else
- {
- LOG("MnRefProvider::SelectFromDialogL cancelled, out");
- aCallback.HandleSelectionErrorL( KErrCancel );
- }
-
- CleanupStack::PopAndDestroy( &lmIds );
- CleanupStack::PopAndDestroy( &dbIndices );
-
- CleanupStack::PopAndDestroy( textArray );
- LOG("MnRefProvider::SelectFromDialogL out");
-}