landmarksui/uicontrols/src/CLmkAppLmSelectorImpl.cpp
branchRCL_3
changeset 17 1fc85118c3ae
parent 16 8173571d354e
child 18 870918037e16
equal deleted inserted replaced
16:8173571d354e 17:1fc85118c3ae
     1 /*
       
     2 * Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  This file contains the selector implementation for landmarks by
       
    15 *               name view
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 
       
    21 
       
    22 
       
    23 
       
    24 
       
    25 // INCLUDE FILES
       
    26 #include <AiwServiceHandler.h>      // AIW
       
    27 #include <AiwCommon.hrh>            // AIW
       
    28 #include <lbsfields.h>
       
    29 #include <aknsfld.h>
       
    30 #include <aknlists.h>
       
    31 #include <StringLoader.h>
       
    32 #include <EPos_CPosLmCategoryCriteria.h>
       
    33 #include <EPos_CPosLmCategoryManager.h>
       
    34 #include <AknWaitDialog.h>
       
    35 #include <lmkui.rsg>
       
    36 #include <landmarks.rsg>
       
    37 #include <CLmkEditorDlg.h> // from system include!
       
    38 #include "clmkdbsearchutils.h"
       
    39 #include "LmkConsts.h"
       
    40 #include "landmarks.hrh"
       
    41 #include "CLmkDbUtils.h"
       
    42 #include "CLmkFields.h"
       
    43 #include "CLmkUiUtils.h"
       
    44 #include "CLmkEditorImpl.h"
       
    45 #include "LmkNotes.h"
       
    46 #include "CLmkSender.h"
       
    47 #include "LmkListProviderFactory.h"
       
    48 #include "CLmkLmItemListProvider.h"
       
    49 #include "CLmkDlgCategorySelectorImpl.h"
       
    50 #include "CLmkLmItemListMemento.h"
       
    51 #include "clmkgotourlcmd.h"
       
    52 #include "CLmkAppLmSelectorImpl.h"
       
    53 #include "MLmkMapAndNavigationObServer.h"
       
    54 #include "CLmkAOOperation.h"
       
    55 #include "MLmkMskObserver.h"
       
    56 #include "CLmkLocSettingLauncher.h"
       
    57 #include <lmkerrors.h>
       
    58 
       
    59 
       
    60 
       
    61 // CONSTANTS
       
    62 /// Unnamed namespace for local definitions
       
    63 namespace {
       
    64 //Below three flags are used only for category remove operation.
       
    65 //This one is used, when the remove operation starts
       
    66 const TInt KRemoveOperationStarted(2);
       
    67 //This one is used when, remove operation ends.
       
    68 const TInt KRemoveOperationCompleted(4);
       
    69 //This one is used, when the remove operation ends & the list box model
       
    70 //also is updated, after getting an event from database.
       
    71 const TInt KRremoveListBoxModUpdated(8);
       
    72 #if defined(_DEBUG)
       
    73 _LIT( KPanicMsg, "CLmkAppLmSelectorImpl" );
       
    74 
       
    75 void Panic( TPanicCode aReason )
       
    76     {
       
    77     User::Panic( KPanicMsg, aReason );
       
    78     }
       
    79 #endif
       
    80 }  // namespace
       
    81 
       
    82 _LIT(KWildCard, "*");
       
    83 
       
    84 // ============================ MEMBER FUNCTIONS ===============================
       
    85 
       
    86 // -----------------------------------------------------------------------------
       
    87 // CLmkAppLmSelectorImpl::CLmkAppLmSelectorImpl
       
    88 // C++ default constructor can NOT contain any code, that
       
    89 // might leave.
       
    90 // -----------------------------------------------------------------------------
       
    91 //
       
    92 CLmkAppLmSelectorImpl::CLmkAppLmSelectorImpl(
       
    93     CPosLandmarkDatabase& aDb,
       
    94     CLmkSender& aSender,
       
    95     TBool aFindBox )
       
    96     : CLmkAppLmItemSelectorImpl( aDb, aSender, aFindBox ),iIsDlgOpen(EFalse)
       
    97     {
       
    98     }
       
    99 
       
   100 // -----------------------------------------------------------------------------
       
   101 // CLmkAppLmSelectorImpl::ConstructL
       
   102 // Symbian 2nd phase constructor can leave.
       
   103 // -----------------------------------------------------------------------------
       
   104 //
       
   105 void CLmkAppLmSelectorImpl::ConstructL()
       
   106     {
       
   107     CLmkAppLmItemSelectorImpl::BaseConstructL();
       
   108     // Added for rel 3.1
       
   109     iLmkCallCmd = CLmkCallCmd::NewL();
       
   110     iDbSearchUtils = NULL;
       
   111     // launching browser
       
   112     iLmkGoToURLCmd = CLmkGoToURLCmd::NewL();
       
   113     }
       
   114 
       
   115 // -----------------------------------------------------------------------------
       
   116 // CLmkAppLmSelectorImpl::ConstructL
       
   117 // Symbian 2nd phase constructor can leave.
       
   118 // -----------------------------------------------------------------------------
       
   119 //
       
   120 void CLmkAppLmSelectorImpl::ConstructL(
       
   121     const MLmkListMemento& aCategoryMemento )
       
   122 	{
       
   123 	// Listing contents of current category is implemented using category
       
   124 	// view's memento:
       
   125 	const CLmkLmItemListMemento& categoryMemento =
       
   126 	static_cast<const CLmkLmItemListMemento&>( aCategoryMemento );
       
   127 	TPosLmItemId categoryId = categoryMemento.MemorizedItemId();
       
   128 
       
   129 	if (categoryId == KPosLmNullItemId) // 'uncategorised' category
       
   130 		{
       
   131 		// set criteria for searchnig 'Uncategorised' landmarks
       
   132 		iCategoryName = StringLoader::LoadL(
       
   133 		    R_LMK_LM_LIST_UNCATEGORISED, const_cast<CEikonEnv *>( iEnv ));
       
   134 		}
       
   135 	else
       
   136 		{
       
   137 		// Construction must fail if category has been deleted:
       
   138 		CPosLmCategoryManager* mgr = CPosLmCategoryManager::NewL( iDb );
       
   139 		CleanupStack::PushL( mgr );
       
   140 		// Leaves with KErrNotFound if category doesn't exist
       
   141 		CPosLandmarkCategory* category = mgr->ReadCategoryLC( categoryId );
       
   142 		TPtrC categoryName;
       
   143 		User::LeaveIfError(category->GetCategoryName(categoryName));
       
   144 		iCategoryName = categoryName.AllocL();
       
   145 		CleanupStack::PopAndDestroy( 2 ); // category, mgr
       
   146 		}
       
   147 
       
   148 	iCriteria = CPosLmCategoryCriteria::NewLC();
       
   149 	CleanupStack::Pop(); // iCriteria
       
   150 	iCriteria->SetCategoryItemId( categoryId );
       
   151     iMarkedCatCountAdded = 0;
       
   152 	// Call "normal" ConstructL():
       
   153 	ConstructL();
       
   154 	}
       
   155 
       
   156 // -----------------------------------------------------------------------------
       
   157 // CLmkAppLmSelectorImpl::NewL
       
   158 // Two-phased constructor.
       
   159 // -----------------------------------------------------------------------------
       
   160 //
       
   161 EXPORT_C CLmkAppLmSelectorImpl* CLmkAppLmSelectorImpl::NewL(
       
   162     CPosLandmarkDatabase& aDb,
       
   163     CLmkSender& aSender,
       
   164     TBool aFindBox )
       
   165     {
       
   166     CLmkAppLmSelectorImpl* self =
       
   167         new( ELeave ) CLmkAppLmSelectorImpl( aDb, aSender, aFindBox );
       
   168 
       
   169     CleanupStack::PushL( self );
       
   170     self->ConstructL();
       
   171     CleanupStack::Pop();
       
   172 
       
   173     return self;
       
   174     }
       
   175 
       
   176 // -----------------------------------------------------------------------------
       
   177 // CLmkAppLmSelectorImpl::NewL
       
   178 // Two-phased constructor.
       
   179 // -----------------------------------------------------------------------------
       
   180 //
       
   181 EXPORT_C CLmkAppLmSelectorImpl* CLmkAppLmSelectorImpl::NewL(
       
   182     CPosLandmarkDatabase& aDb,
       
   183     const MLmkListMemento& aCategoryMemento,
       
   184     CLmkSender& aSender,
       
   185     TBool aFindBox )
       
   186     {
       
   187     CLmkAppLmSelectorImpl* self =
       
   188         new( ELeave ) CLmkAppLmSelectorImpl( aDb, aSender, aFindBox );
       
   189 
       
   190     CleanupStack::PushL( self );
       
   191     self->ConstructL( aCategoryMemento );
       
   192     CleanupStack::Pop();
       
   193 
       
   194     return self;
       
   195     }
       
   196 
       
   197 // -----------------------------------------------------------------------------
       
   198 // CLmkAppLmSelectorImpl::~CLmkAppLmSelectorImpl
       
   199 // -----------------------------------------------------------------------------
       
   200 //
       
   201 CLmkAppLmSelectorImpl::~CLmkAppLmSelectorImpl()
       
   202     {
       
   203     delete iCriteria;
       
   204     delete iCategoryName;
       
   205     delete iLmkCallCmd;
       
   206     delete iDbSearchUtils;
       
   207     delete iLmkGoToURLCmd;
       
   208     }
       
   209 
       
   210 // -----------------------------------------------------------------------------
       
   211 // CLmkAppLmSelectorImpl::CategoryNameL
       
   212 // -----------------------------------------------------------------------------
       
   213 //
       
   214 EXPORT_C TPtrC CLmkAppLmSelectorImpl::CategoryNameL()
       
   215     {
       
   216     return *iCategoryName;
       
   217     }
       
   218 
       
   219 // -----------------------------------------------------------------------------
       
   220 // CLmkAppLmSelectorImpl::SetupListProviderL
       
   221 // -----------------------------------------------------------------------------
       
   222 //
       
   223 void CLmkAppLmSelectorImpl::SetupListProviderL()
       
   224     {
       
   225     if ( !iListProvider )
       
   226         {
       
   227         if ( iCriteria )
       
   228             {
       
   229             iListProvider =
       
   230                 LmkListProviderFactory::CreateProviderL( iDb, *iCriteria );
       
   231             }
       
   232         else
       
   233             {
       
   234             iListProvider =
       
   235                 LmkListProviderFactory::CreateProviderL( iDb,
       
   236                                                          ELandmarkSelector );
       
   237             }
       
   238         iListProvider->AddObserverL( *this );
       
   239         iListProvider->InitializeL();
       
   240         }
       
   241     }
       
   242 
       
   243 // -----------------------------------------------------------------------------
       
   244 // CLmkAppLmSelectorImpl::ListProvider
       
   245 // -----------------------------------------------------------------------------
       
   246 //
       
   247 const CLmkListProviderBase& CLmkAppLmSelectorImpl::ListProvider() const
       
   248     {
       
   249     __ASSERT_DEBUG( iListProvider, Panic( KLmkPanicNullMember ) );
       
   250     return *iListProvider;
       
   251     }
       
   252 
       
   253 // -----------------------------------------------------------------------------
       
   254 // CLmkAppLmSelectorImpl::HandleCategorySearchNotifyL
       
   255 // -----------------------------------------------------------------------------
       
   256 //
       
   257 void CLmkAppLmSelectorImpl::HandleCategorySearchNotifyL(RArray<TPosLmItemId> /*aArray*/)
       
   258 	{
       
   259 	// This search is not used
       
   260 	}
       
   261 
       
   262 // -----------------------------------------------------------------------------
       
   263 // CLmkAppLmSelectorImpl::HandleLmkSearchNotifyL
       
   264 // -----------------------------------------------------------------------------
       
   265 //
       
   266 void CLmkAppLmSelectorImpl::HandleLmkSearchNotifyL()
       
   267 	{
       
   268 	iWaitNote->ProcessFinishedL();
       
   269 	}
       
   270 
       
   271 // -----------------------------------------------------------------------------
       
   272 // CLmkAppLmSelectorImpl::ProcessCommandL
       
   273 // -----------------------------------------------------------------------------
       
   274 //
       
   275 void CLmkAppLmSelectorImpl::ProcessCommandL( TInt aCommandId )
       
   276     {
       
   277     __ASSERT_DEBUG( iListProvider, Panic( KLmkPanicNullMember ) );
       
   278     switch ( aCommandId )
       
   279         {
       
   280         case ELmkCmdEditLm:
       
   281             {
       
   282             if( iIsDlgOpen )
       
   283             	break;
       
   284             	
       
   285           	EditLandmarkCmdL(CLmkEditorDlg::ELmkEditor);
       
   286   					iSearchBox->ResetL();
       
   287 
       
   288             break;
       
   289             }
       
   290         case ELmkCmdOpenLm:
       
   291             {
       
   292             if( iIsDlgOpen )
       
   293             	break;
       
   294 
       
   295             EditLandmarkCmdL(CLmkEditorDlg::ELmkViewer);
       
   296     		iSearchBox->ResetL();
       
   297 
       
   298     	#ifdef RD_SCALABLE_UI_V2
       
   299     		iSearchBox->DrawDeferred();
       
   300         #endif// RD_SCALABLE_UI_V2
       
   301        		iListProvider->StartSearchingLandmarksL(KWildCard, EFalse);
       
   302             break;
       
   303             }
       
   304         case ELmkCmdGoToUrl:
       
   305             {
       
   306 			HBufC* lmkUrl = HBufC::NewL( KMaxBufferLen );
       
   307 			CleanupStack::PushL( lmkUrl );
       
   308 			if (GetPositionFieldForSelectedLmL(
       
   309 							ELmkPositionFieldWebAddress,
       
   310 							*lmkUrl ) == KErrNone)
       
   311 				{
       
   312 				if ( lmkUrl->Length() > 0 )
       
   313 					{
       
   314 					// Get the URL of the LM and launch browser
       
   315 					iLmkGoToURLCmd->LaunchBrowserL( *lmkUrl );
       
   316 					}
       
   317 				}
       
   318 			CleanupStack::PopAndDestroy( lmkUrl );
       
   319 			break;
       
   320             }
       
   321         case ELmkCmdCall:
       
   322 	        {
       
   323 			// Create AIW interest
       
   324 	        ExecuteAIWCallCmdL( aCommandId );
       
   325 	        break;
       
   326 	        }
       
   327         case ELmkCmdDeleteLm:
       
   328             {
       
   329             DeleteLandmarksCmdL();
       
   330             break;
       
   331             }
       
   332 		case ELmkCmdChangeIcon:
       
   333 			{
       
   334             ChangeIconCmdL();
       
   335 			break;
       
   336 			}
       
   337         case ELmkCmdAddToCat:
       
   338             {
       
   339             AddToCatCmdL();
       
   340             break;
       
   341             }
       
   342         case ELmkCmdSendVia1:
       
   343         case ELmkCmdSendVia2:
       
   344         case ELmkCmdSendVia3:
       
   345         case ELmkCmdSendVia4:
       
   346         case ELmkCmdSendVia5:
       
   347         case ELmkCmdSendVia6:
       
   348         case ELmkCmdSendVia7:
       
   349         case ELmkCmdSendVia8:
       
   350         case ELmkCmdSendVia9:
       
   351         case ELmkCmdSendVia10:
       
   352         case ELmkCmdSend:
       
   353             {
       
   354             RArray<TPosLmItemId>& markedIds = MarkedItemIdsL();
       
   355             if(markedIds.Count() == 0)
       
   356             	{
       
   357             	CPosLandmark* landmark = iDb.ReadLandmarkLC(SelectedIdL());
       
   358             	iSender.SendSingleLandmarkL(*landmark);
       
   359             	CleanupStack::PopAndDestroy();//landmark
       
   360             	}
       
   361             else
       
   362             	{
       
   363             	//Send multiple landmarks
       
   364            		TPtrC ptr;
       
   365 	        	RPointerArray<CLmkLandmark> lmkArray;
       
   366 	        	TRAPD( sendErr, iSender.PrepareMultipleLandmarkForSendL(lmkArray,markedIds) );
       
   367 	        	if(sendErr == KErrNone)
       
   368 	        		{
       
   369 	        		TRAP( sendErr, iSender.SendLandmarksL(aCommandId,ptr,lmkArray) );
       
   370 	        		}
       
   371 	        	lmkArray.ResetAndDestroy();
       
   372 	        	if(sendErr == KErrNoMemory)
       
   373 	        		{
       
   374 	        		User::LeaveNoMemory();
       
   375 	        		}
       
   376             	}
       
   377             break;
       
   378             }
       
   379         case EAknCmdMark:
       
   380         case EAknCmdUnmark:
       
   381         case EAknMarkAll:
       
   382         case EAknUnmarkAll:
       
   383 	        {
       
   384 	        if(iMskObserver)
       
   385 				{
       
   386 				iMskObserver->UpdateMskContainerL();
       
   387 				}
       
   388 			break;
       
   389 	        }
       
   390 		case ELmkCmdLaunchPositionSettings:
       
   391 			{
       
   392 			LaunchPosSettingsL();
       
   393 			break;
       
   394 			}
       
   395         case ELmkCmdFindBoxSearchAfresh:
       
   396         case ELmkCmdFindBoxSearchInPreviousResults:
       
   397         	{
       
   398 			TInt searchTextLength = iSearchBox->TextLength();
       
   399 		    const TInt KExtraChars = 2; // 2 chars wildcards
       
   400 		    HBufC* filterBuf = HBufC::NewLC(searchTextLength + KExtraChars);
       
   401 		    TPtr filter = filterBuf->Des();
       
   402 		    iSearchBox->GetSearchText(filter);
       
   403 	        filter.Append(KWildCard);
       
   404 	        iListProvider->StartSearchingLandmarksL(filter, EFalse);
       
   405             CleanupStack::PopAndDestroy( filterBuf );
       
   406 
       
   407 	        break;
       
   408         	}
       
   409         default:
       
   410             {
       
   411             CLmkAppLmItemSelectorImpl::ProcessCommandL( aCommandId );
       
   412             break;
       
   413             }
       
   414         }
       
   415     }
       
   416 
       
   417 EXPORT_C void CLmkAppLmSelectorImpl::StartSearchingLandmarksL(
       
   418 								const TDesC& /*aSearchPattern*/,
       
   419     							TBool /*aSearchOnlyInPreviousMatches*/)
       
   420 	{
       
   421 	iListProvider->InitializeL();
       
   422 	}
       
   423 
       
   424 // -----------------------------------------------------------------------------
       
   425 // CLmkAppLmSelectorImpl::HandleOperationL
       
   426 // -----------------------------------------------------------------------------
       
   427 //
       
   428 void CLmkAppLmSelectorImpl::HandleOperationL(
       
   429                                        TOperationTypes aType,
       
   430                                        TReal32 /*aProgress*/,
       
   431                                        TInt aStatus )
       
   432     {
       
   433     TBool deleteNote = EFalse;
       
   434     switch (aType)
       
   435         {
       
   436          case EDeleteLandmarks:
       
   437              {
       
   438              if (aStatus != KPosLmOperationNotComplete)
       
   439                  {
       
   440                  deleteNote = ETrue;
       
   441                  }
       
   442              }
       
   443          break;
       
   444          case EAddToCategory:
       
   445              {
       
   446              if (iMarkedCatCountAdded ==1)
       
   447                  {
       
   448                  deleteNote = ETrue;
       
   449                  }
       
   450               else if (iMarkedCatCountAdded > 1)
       
   451                  {
       
   452                  --iMarkedCatCountAdded;
       
   453                  }
       
   454              }
       
   455          break;
       
   456         case ERemoveCategory:
       
   457         	{
       
   458         	if (iOperation && aStatus != KPosLmOperationNotComplete)
       
   459 	        	{
       
   460 		        if((iCatRemoveFlag & KRremoveListBoxModUpdated) &&
       
   461 		           (iCatRemoveFlag & KRemoveOperationStarted )&& iWaitNote)
       
   462 					{
       
   463 					//Since the operation is completed and listbox model
       
   464 					//is updated first, wait note can be closed now
       
   465 					CloseWaitNoteL();
       
   466 			        iListBox->SetCurrentItemIndex(0);
       
   467 			        //nullify all the flags
       
   468 			        iCatRemoveFlag &= ~KRemoveOperationCompleted;
       
   469 			        iCatRemoveFlag &= ~KRremoveListBoxModUpdated;
       
   470 			        iCatRemoveFlag &= ~KRemoveOperationStarted;
       
   471 					}
       
   472 				else
       
   473 					{
       
   474 					//operation completed but cannot close the wait dialog
       
   475 					//since, the listbox model is not updated.Now , it will
       
   476 					//be closed in HandleEventListReadyL function.Set the operation
       
   477 					//completion flag
       
   478 					iCatRemoveFlag |= KRemoveOperationCompleted;
       
   479 					}
       
   480 				}
       
   481     	   	}
       
   482          break;
       
   483          default:
       
   484          break;
       
   485         }
       
   486 
       
   487     if (deleteNote && iWaitNote)
       
   488         {
       
   489         iWaitNote->ProcessFinishedL();
       
   490         iWaitNote = NULL;
       
   491         }
       
   492     }
       
   493 
       
   494 // -----------------------------------------------------------------------------
       
   495 // CLmkAppLmSelectorImpl::ChangeIconL
       
   496 // -----------------------------------------------------------------------------
       
   497 //
       
   498 void CLmkAppLmSelectorImpl::ChangeIconL(
       
   499     TPosLmItemId aId,
       
   500     TInt aIconIndex,
       
   501     TInt aMaskIndex)
       
   502     {
       
   503     TFileName* iconFile = CLmkUiUtils::LmkUiIconFileLC();
       
   504     iDbUtils->ChangeIconL( iDb, aId, ELmkItemTypeLandmark,
       
   505                            *iconFile, aIconIndex, aMaskIndex);
       
   506     CleanupStack::PopAndDestroy();//iconFile
       
   507     }
       
   508 
       
   509 // -----------------------------------------------------------------------------
       
   510 // CLmkAppLmSelectorImpl::ChangeIconsL
       
   511 // -----------------------------------------------------------------------------
       
   512 //
       
   513 void CLmkAppLmSelectorImpl::ChangeIconsL(
       
   514     RArray<TPosLmItemId>& aIdArray,
       
   515     TInt aIconIndex,
       
   516     TInt aMaskIndex)
       
   517     {
       
   518     TFileName* iconFile = CLmkUiUtils::LmkUiIconFileLC();
       
   519     iDbUtils->ChangeIconsL( aIdArray, ELmkItemTypeLandmark,
       
   520                             *iconFile, aIconIndex, aMaskIndex);
       
   521 	CleanupStack::PopAndDestroy();//iconFile
       
   522     }
       
   523 
       
   524 // -----------------------------------------------------------------------------
       
   525 // CLmkAppLmSelectorImpl::InitialLandmarkL
       
   526 // -----------------------------------------------------------------------------
       
   527 //
       
   528 void CLmkAppLmSelectorImpl::InitialLandmarkL( CPosLandmark* aLandmark )
       
   529     {
       
   530     if ( iCriteria )
       
   531         {// category is a valid category in the LM database (not 'uncategorised')
       
   532         if (iCriteria->CategoryItemId() != KPosLmNullItemId)
       
   533 	        {
       
   534 	        aLandmark->AddCategoryL( iCriteria->CategoryItemId() );
       
   535 	        }
       
   536 
       
   537         }
       
   538     }
       
   539 
       
   540 // -----------------------------------------------------------------------------
       
   541 // CLmkAppLmSelectorImpl::EditLandmarkCmdL
       
   542 // -----------------------------------------------------------------------------
       
   543 //
       
   544 void CLmkAppLmSelectorImpl::EditLandmarkCmdL(TLmkEditorMode aEditMode)
       
   545     {
       
   546     TLmkEditorAttributes attributeFlags( CLmkEditorDlg::ELmkAll );
       
   547     TChar DriveName = 'c';
       
   548     TInt BytesToWrite = 0;
       
   549 
       
   550     DiskSpaceBelowCriticalLevelL(BytesToWrite, DriveName);
       
   551     iNewLmkItemId = SelectedIdL();
       
   552     if(iDlg)
       
   553     	{
       
   554     	iDlg = NULL;
       
   555     	}
       
   556     iDlg = CLmkEditorImpl::NewL( iDb,
       
   557                                                 iSender,
       
   558                                                 attributeFlags,
       
   559                                                 aEditMode,
       
   560                                                 iNewLmkItemId );
       
   561     iDlg->ExecuteLD();
       
   562     iDlg = NULL;
       
   563 
       
   564 #ifdef RD_SCALABLE_UI_V2
       
   565    TInt listProviderCount = LmItemListProvider().ItemCount();
       
   566    TInt listBoxItemCount = iListBox->Model()->NumberOfItems();
       
   567    TInt currentItemIndex = LmItemListProvider().SelectedIndex(iNewLmkItemId);// iListBox->CurrentItemIndex();
       
   568    if (listProviderCount != listBoxItemCount)
       
   569        {
       
   570        iDeletionHelper.StoreListInformation( *iListBox, EFalse );
       
   571        }
       
   572    iDeletionHelper.UpdateListIfDeleteHappenedL();
       
   573    if( currentItemIndex >= 0 && currentItemIndex < iListBox->Model()->NumberOfItems() )
       
   574        {
       
   575        iListBox->SetCurrentItemIndex(currentItemIndex);
       
   576        }   
       
   577 #endif // RD_SCALABLE_UI_V2
       
   578    TRAPD(err,CPosLandmark* landmark = iDb.ReadLandmarkLC(iNewLmkItemId);CleanupStack::PopAndDestroy( landmark ));
       
   579    if (err == KErrNotFound)
       
   580        {
       
   581        LmItemListProvider().RemoveItem( iNewLmkItemId );
       
   582        }      
       
   583     }
       
   584 
       
   585 // -----------------------------------------------------------------------------
       
   586 // CLmkAppLmSelectorImpl::GetSelectedLandmarksL
       
   587 // -----------------------------------------------------------------------------
       
   588 //
       
   589 TInt CLmkAppLmSelectorImpl::GetSelectedLandmarksL(RPointerArray<CPosLandmark> &aArray)
       
   590 	{
       
   591 	if( ! iListBox->Model()->NumberOfItems() )
       
   592 		{
       
   593 		return KErrNotFound;
       
   594 		}
       
   595 
       
   596 	RArray<TPosLmItemId>& markedItemIds = MarkedItemIdsL();
       
   597     TInt markedCount = markedItemIds.Count();
       
   598     if ( markedCount == 0 )
       
   599     	{
       
   600     	TPosLmItemId itemId = SelectedIdL();
       
   601     	CPosLandmark *lmk = iDb.ReadLandmarkLC(itemId);
       
   602     	aArray.Append(lmk);
       
   603     	CleanupStack::Pop(); // ReadLandmarkLC
       
   604     	return KErrNone;
       
   605     	}
       
   606     else
       
   607     	{
       
   608     	if(markedCount == 1)
       
   609     		{
       
   610     		// Donot request if only one landmark
       
   611     		TPosLmItemId itemId = markedItemIds[0];
       
   612     		CPosLandmark *lmk = iDb.ReadLandmarkLC(itemId);
       
   613     		aArray.Append(lmk);
       
   614     		CleanupStack::Pop(); // ReadLandmarkLC
       
   615     		return KErrNone;
       
   616     		}
       
   617     	RArray<TPosLmItemId> itemIds;
       
   618     	for(TInt index = 0;index < markedCount; index++)
       
   619     		{
       
   620     		TPosLmItemId itemId = markedItemIds[index];
       
   621     		itemIds.Append(itemId);
       
   622     		}
       
   623     	if(iDbSearchUtils == NULL)
       
   624     		{
       
   625     		iDbSearchUtils = CLmkDbSearchUtils::NewL();
       
   626     		}
       
   627     	iDbSearchUtils->GetLandmarksL(this, itemIds ,&aArray);
       
   628     	iWaitNote = new (ELeave) CAknWaitDialog(NULL, ETrue);
       
   629 		iWaitNote->ExecuteLD(R_LMKUI_PROCESSING_WAIT_NOTE);
       
   630 		iWaitNote = NULL;
       
   631 		return KErrNone;
       
   632     	}
       
   633 	}
       
   634 
       
   635 // -----------------------------------------------------------------------------
       
   636 // CLmkAppLmSelectorImpl::IsLandmarkDataEmptyL
       
   637 // -----------------------------------------------------------------------------
       
   638 //
       
   639 TBool CLmkAppLmSelectorImpl::IsLandmarkDataEmptyL(CPosLandmark* aLandmark)
       
   640 	{
       
   641 	// verify that destination landmark has coordinates
       
   642     TLocality loc;
       
   643     TBool isValid = (KErrNone == aLandmark->GetPosition( loc ) );
       
   644     isValid &= !Math::IsNaN( loc.Latitude() ) && !Math::IsNaN( loc.Longitude() );
       
   645     return !isValid;
       
   646     
       
   647 /*
       
   648     if ( !isValid )
       
   649         {
       
   650         // verify that destination landmark has address info
       
   651         TPositionFieldId fieldId = aLandmark->FirstPositionFieldId();
       
   652         while ( fieldId != EPositionFieldNone )
       
   653             {
       
   654             if ( fieldId > EPositionFieldAddressCapabilitiesBegin &&
       
   655                  fieldId < EPositionFieldBuildingTelephone)
       
   656                 {
       
   657                 TPtrC field;
       
   658                 aLandmark->GetPositionField( fieldId, field );
       
   659                 if ( field.Length() )
       
   660                     {
       
   661                     isValid = ETrue;
       
   662                     break;
       
   663                     }
       
   664                 }
       
   665             fieldId = aLandmark->NextPositionFieldId( fieldId );
       
   666             }
       
   667         }
       
   668     return !isValid;
       
   669 */
       
   670 	}
       
   671 
       
   672 
       
   673 // -----------------------------------------------------------------------------
       
   674 // CLmkAppLmSelectorImpl::DeleteLandmarksCmdL
       
   675 // -----------------------------------------------------------------------------
       
   676 //
       
   677 void CLmkAppLmSelectorImpl::DeleteLandmarksCmdL()
       
   678     {
       
   679 
       
   680     if( ! iListBox->Model()->NumberOfItems() )
       
   681     	return;
       
   682 
       
   683     RArray<TPosLmItemId>& markedItemIds = MarkedItemIdsL();
       
   684     TInt markedCount = markedItemIds.Count();
       
   685     if ( markedCount == 0 )
       
   686         {
       
   687         if ( LmkNotes::LandmarkConfirmationQueryL( iEnv, 1 ) )
       
   688             {
       
   689             iDeletionHelper.StoreListInformation( *iListBox, EFalse );
       
   690             TPosLmItemId selectedId = SelectedIdL();
       
   691             LmItemListProvider().RemoveItem( selectedId );
       
   692             iDbUtils->DeleteLandmarkL( selectedId, iDb );
       
   693             }
       
   694 
       
   695         }
       
   696     else
       
   697         {
       
   698         if ( LmkNotes::LandmarkConfirmationQueryL( iEnv, markedCount ) )
       
   699             {
       
   700 			StoreIdTobeFocussedAfterDeletion( markedItemIds );
       
   701             iDeletionHelper.StoreListInformation( *iListBox, ETrue );
       
   702 
       
   703             if( markedCount == 1 )
       
   704             	{
       
   705             	LmItemListProvider().RemoveItem( markedItemIds[0] );
       
   706             	iDbUtils->DeleteLandmarkL( markedItemIds[0], iDb );
       
   707             	return;
       
   708             	}
       
   709 			// The 10 value is set as standard to remove the multiple landmarks and new procedure for operation
       
   710             if( markedCount > 10)
       
   711             	{
       
   712             	LmItemListProvider().RemoveItemsL(markedItemIds,
       
   713             								MLmkAOOperationObserver::EDeleteLandmarks,
       
   714             								KPosLmNullItemId);
       
   715             	}
       
   716         	else
       
   717         		{
       
   718         		iDbUtils->DeleteLandmarksL( markedItemIds );
       
   719 
       
   720 	            // wait note
       
   721 	            iWaitNote = new (ELeave) CAknWaitDialog( NULL, ETrue );
       
   722 	            if ( !iWaitNote->ExecuteLD( R_LMK_DELETING_WAIT_NOTE ) )
       
   723 	                {
       
   724 	                //making iWaitNote null, since framework destroys waitnote
       
   725 	        		//dialog on pressing cancel.
       
   726 	        		iWaitNote = NULL;
       
   727 	                iDbUtils->CancelLmOperation();
       
   728 	                }
       
   729         		}
       
   730             }
       
   731         }
       
   732     }
       
   733 
       
   734 // -----------------------------------------------------------------------------
       
   735 // CLmkAppLmSelectorImpl::AddToCatL
       
   736 // -----------------------------------------------------------------------------
       
   737 //
       
   738 void CLmkAppLmSelectorImpl::AddToCatCmdL()
       
   739     {
       
   740     CLmkDlgCategorySelectorImpl* dlg =
       
   741         CLmkDlgCategorySelectorImpl::NewL( iDb, ETrue, ETrue );
       
   742     CleanupStack::PushL( dlg );
       
   743     dlg->SetEmptyDlgLabel( R_LMK_EMPTY_NO_CATEGORIES ,R_LMK_GUIDE_CREATE_LANDMARK );
       
   744     RArray<TPosLmItemId> categories;
       
   745     CleanupClosePushL( categories );
       
   746     if ( dlg->ExecuteL( categories ) )
       
   747         {
       
   748         RArray<TPosLmItemId>& markedLmIds = MarkedItemIdsL();
       
   749         TInt markedLmCount = markedLmIds.Count();
       
   750         TInt markedCatCount = categories.Count();
       
   751         iMarkedCatCountAdded = markedCatCount;
       
   752         if ( markedCatCount > 0 )
       
   753             {
       
   754             LmItemListProvider().SetOperationCmd( ELmkCmdAddToCat );
       
   755             LmItemListProvider().SetSelectedItemsCount( markedCatCount );
       
   756 
       
   757             if( markedLmCount == 0 )
       
   758             	markedLmIds.Append( SelectedIdL() );
       
   759 
       
   760             iDbUtils->AddLmsToCategoriesL( markedLmIds, categories );
       
   761 
       
   762             // wait note
       
   763             iWaitNote = new (ELeave) CAknWaitDialog( NULL, ETrue );
       
   764             if ( !iWaitNote->ExecuteLD( R_LMK_PROCESSING_WAIT_NOTE ) )
       
   765                 {
       
   766                 //making iWaitNote null, since framework destroys waitnote
       
   767         		//dialog on pressing cancel.
       
   768 	        	LmItemListProvider().SetSelectedItemsCount( 0 );
       
   769         		iWaitNote = NULL;
       
   770                 iDbUtils->CancelLmOperation();
       
   771                 }
       
   772             iListBox->ClearSelection();
       
   773 	        }
       
   774 
       
   775 		if( iMskObserver )
       
   776 			{
       
   777 			iMskObserver->UpdateMskContainerL();
       
   778 			}
       
   779         }
       
   780     CleanupStack::PopAndDestroy( 2 ); // categories, dlg
       
   781     }
       
   782 
       
   783 // -----------------------------------------------------------------------------
       
   784 // CLmkAppLmSelectorImpl::HandleEventListReadyL
       
   785 // -----------------------------------------------------------------------------
       
   786 //
       
   787 TBool CLmkAppLmSelectorImpl::HandleEventListReadyL()
       
   788     {
       
   789     // Possibly user-initiated delete finished --> if yes, update the list:
       
   790     TBool retVal;
       
   791 	if( iNewListBoxItemAdded )
       
   792 		{
       
   793 		CAknFilteredTextListBoxModel* model = static_cast<CAknFilteredTextListBoxModel*>( iListBox->Model() );
       
   794         CAknListBoxFilterItems* filter = static_cast<CAknListBoxFilterItems*>( model->Filter() );
       
   795         filter->HandleItemArrayChangeL();
       
   796 
       
   797 	    TInt listboxIndex = LmItemListProvider().SelectedIndex(iNewLmkItemId);
       
   798 
       
   799 	    /* When the user tries to create a new landmark in category content view (catId = n)
       
   800 	     * Chooses to deselect that category from multiple category selector
       
   801 	     * The landmark gets added to either 'uncategorised' category or any other
       
   802 	     * category than the current category -->n
       
   803 	     */
       
   804 
       
   805 	    if ( listboxIndex == KLmkInValidIndex )
       
   806 		    {
       
   807 		    retVal = EFalse;
       
   808 		    return retVal;
       
   809 		    }
       
   810 
       
   811 	    if ( listboxIndex != KErrNotFound &&
       
   812 	         listboxIndex < iListBox->Model()->NumberOfItems() )
       
   813 	        {
       
   814 			iListBox->SetCurrentItemIndex(listboxIndex);
       
   815 	        }
       
   816         UpdateMarkIndexAfterAdditionL( listboxIndex );
       
   817 		iListBox->DrawDeferred();
       
   818 		iNewListBoxItemAdded = EFalse;
       
   819 		retVal = ETrue;
       
   820 		}
       
   821     else  // Either item is updated/deleted
       
   822 		{
       
   823 		/*Check if the database item count and list item count are same or not
       
   824 		*If there is a change, update the list box
       
   825 		*(The deletion of an item due to updates in landmark category info
       
   826 		*via category in selection via landmark editor or via 'Addtocategory'
       
   827 		*command from the Landmark App views)
       
   828 		*/
       
   829 		if(iDlg)
       
   830 		{
       
   831 		TRAP_IGNORE(iDlg->UpdateViewDlgL());
       
   832 		}
       
   833 		TInt listProviderCount = LmItemListProvider().ItemCount();
       
   834 		TInt listBoxItemCount = iListBox->Model()->NumberOfItems();
       
   835 		if (listProviderCount != listBoxItemCount)
       
   836 			{
       
   837 			iDeletionHelper.StoreListInformation( *iListBox, EFalse );
       
   838 			}
       
   839 
       
   840 		retVal = iDeletionHelper.UpdateListIfDeleteHappenedL();
       
   841 
       
   842 		if( retVal)
       
   843 			{
       
   844 			SetFocusToItemAfterDeletionOfMarkedItems();
       
   845 			}
       
   846 		//
       
   847 		if( (iCatRemoveFlag & KRemoveOperationStarted) )
       
   848 			{
       
   849 			if((iCatRemoveFlag & KRemoveOperationCompleted) && iWaitNote)
       
   850 				{
       
   851 				CloseWaitNoteL();
       
   852 		        iListBox->SetCurrentItemIndex(0);
       
   853 		        iCatRemoveFlag &= ~KRremoveListBoxModUpdated;
       
   854 		        iCatRemoveFlag &= ~KRemoveOperationCompleted;
       
   855 		        iCatRemoveFlag &= ~KRemoveOperationStarted;
       
   856 				}
       
   857 			else
       
   858 				{
       
   859 				//operation completed but cannot close the wait dialog
       
   860 				//since, the operation is not yet completed , it will
       
   861 				//be closed in HandleOperationL function.
       
   862 				iCatRemoveFlag |= KRremoveListBoxModUpdated;
       
   863 				}
       
   864 			}
       
   865 		}
       
   866     return retVal;
       
   867     }
       
   868 
       
   869 // ----------------------------------------------------
       
   870 // CLmkAppLmSelectorImpl::AttachToAIWMenuL()
       
   871 // ----------------------------------------------------
       
   872 //
       
   873 void CLmkAppLmSelectorImpl::AttachToAIWMenuL(
       
   874 		TInt aMenuResourceId,
       
   875 		TInt aInterestResourceId)
       
   876 	{
       
   877 	iLmkCallCmd->AttachMenuPaneL( aMenuResourceId, aInterestResourceId);
       
   878 	}
       
   879 
       
   880 // ----------------------------------------------------
       
   881 // CLmkAppLmSelectorImpl::InitializeMenuPaneL()
       
   882 // ----------------------------------------------------
       
   883 //
       
   884 void CLmkAppLmSelectorImpl::InitializeMenuPaneL(
       
   885 		CEikMenuPane& aMenuPane,
       
   886 		TInt aMenuResourceId)
       
   887 	{
       
   888 	// Initialize the AIW menu service
       
   889 	iLmkCallCmd->InitializeMenuPaneL(
       
   890 				aMenuPane,
       
   891 				aMenuResourceId,
       
   892 				ELmkCmdLast // Must not overlap with the other menu ids!
       
   893 				);
       
   894 	}
       
   895 // ----------------------------------------------------
       
   896 // CLmkAppLmSelectorImpl::AttachInterestL()
       
   897 // ----------------------------------------------------
       
   898 //
       
   899 void CLmkAppLmSelectorImpl::AttachInterestL (
       
   900 		TInt aInterestResourceId)
       
   901 	{
       
   902 	iLmkCallCmd->AttachInterestL(aInterestResourceId);
       
   903 	}
       
   904 
       
   905 // -----------------------------------------------------------------------------
       
   906 // CLmkAppLmSelectorImpl::ExecuteAIWCallCmdL()
       
   907 // -----------------------------------------------------------------------------
       
   908 //
       
   909 void CLmkAppLmSelectorImpl::ExecuteAIWCallCmdL(
       
   910 		 TInt aCommandId )
       
   911 	{
       
   912 	HBufC* lmkPhoneNum = HBufC:: NewL( KMaxPhoneNumberFieldLen );
       
   913 	CleanupStack::PushL(lmkPhoneNum);
       
   914 
       
   915 	if ( (GetPositionFieldForSelectedLmL(
       
   916 							ELmkPositionFieldPhoneNumber,
       
   917 							*lmkPhoneNum ) == KErrNone) && (lmkPhoneNum->Des().Length() > 0) )
       
   918 		{
       
   919 		iLmkCallCmd->ExecuteAIWCallCmdL( aCommandId, *lmkPhoneNum );
       
   920 		}
       
   921 	else
       
   922 		{
       
   923 		// Info note here with landmark name
       
   924 		TPosLmItemId lmId = SelectedIdL();
       
   925 		CPosLandmark* landmark = iDb.ReadLandmarkLC(lmId);
       
   926 		// Get name
       
   927 		TPtrC lmkNamePtr;
       
   928 		if ( landmark->GetLandmarkName ( lmkNamePtr ) == KErrNone )
       
   929 			{
       
   930 			LmkNotes::InformationNotewithTextL( iEnv,
       
   931 			                 R_LMK_NOTE_NO_NUMBER_TO_NAME, lmkNamePtr);
       
   932 			}
       
   933 		CleanupStack::PopAndDestroy( landmark );
       
   934 		}
       
   935 	CleanupStack::PopAndDestroy(lmkPhoneNum);
       
   936 	}
       
   937 
       
   938 // -----------------------------------------------------------------------------
       
   939 // CLmkAppLmSelectorImpl::GetPositionFieldForSelectedLmL()
       
   940 // -----------------------------------------------------------------------------
       
   941 //
       
   942 TInt CLmkAppLmSelectorImpl::GetPositionFieldForSelectedLmL(
       
   943 	                        TPositionFieldId  aFieldId,
       
   944 	                        HBufC& aFieldValue )
       
   945 	{
       
   946 	TPosLmItemId lmId = SelectedIdL();
       
   947 	TPtrC tmpPtr;
       
   948 
       
   949 	CPosLandmark* landmark = iDb.ReadLandmarkLC(lmId);
       
   950 	TInt retVal (-1);
       
   951 	if ( landmark->IsPositionFieldAvailable( aFieldId ) )
       
   952 		{
       
   953 		retVal = landmark->GetPositionField( aFieldId, tmpPtr );
       
   954 		}
       
   955 	if ( aFieldValue.Des().MaxLength() >= tmpPtr.Length() )
       
   956     	{
       
   957         aFieldValue.Des().Copy( tmpPtr );
       
   958     	}
       
   959 	CleanupStack::PopAndDestroy( landmark );
       
   960 	return retVal;
       
   961 	}
       
   962 
       
   963 // -----------------------------------------------------------------------------
       
   964 // CLmkAppLmSelectorImpl::IsThisLandmarkFieldDefined
       
   965 // -----------------------------------------------------------------------------
       
   966 //
       
   967 TBool CLmkAppLmSelectorImpl::IsLmWithThisFieldExistL ( TLmkAppCmdId aCmdId )
       
   968     {
       
   969 
       
   970     TBool lmkFieldExist = EFalse;
       
   971     TPositionFieldId lmkPostionField (0);
       
   972 
       
   973     if ( aCmdId == ELmkCmdCall )
       
   974         {
       
   975         lmkPostionField = ELmkPositionFieldPhoneNumber;
       
   976         }
       
   977     if ( aCmdId == ELmkCmdGoToUrl )
       
   978         {
       
   979         lmkPostionField = ELmkPositionFieldWebAddress;
       
   980         }
       
   981 
       
   982     HBufC* lmkField =  HBufC::NewL( KMaxBufferLen );
       
   983     CleanupStack::PushL( lmkField );
       
   984 
       
   985     if ( (GetPositionFieldForSelectedLmL(
       
   986 							lmkPostionField,
       
   987 							*lmkField ) == KErrNone) &&
       
   988 							(lmkField->Des().Length() > 0) )
       
   989         {
       
   990         lmkFieldExist = ETrue;
       
   991         }
       
   992     CleanupStack::PopAndDestroy( lmkField );
       
   993     return lmkFieldExist;
       
   994     }
       
   995 
       
   996 // -----------------------------------------------------------------------------
       
   997 // CLmkAppLmSelectorImpl::HandleLmCreated
       
   998 // -----------------------------------------------------------------------------
       
   999 //
       
  1000 void CLmkAppLmSelectorImpl::HandleLmCreated(TPosLmItemId aNewLmkItemId)
       
  1001     {
       
  1002     iNewLmkItemId = aNewLmkItemId;
       
  1003     iNewListBoxItemAdded = ETrue;
       
  1004     }
       
  1005 
       
  1006 // -----------------------------------------------------------------------------
       
  1007 // CLmkAppLmSelectorImpl::RemoveLandmarksFromCategory
       
  1008 // -----------------------------------------------------------------------------
       
  1009 //
       
  1010 EXPORT_C void CLmkAppLmSelectorImpl::RemoveLandmarksFromCategoryL()
       
  1011 	{
       
  1012 	if(iCriteria)
       
  1013 		{
       
  1014 		TPosLmItemId catId = iCriteria->CategoryItemId();
       
  1015 		RArray<TPosLmItemId>& itemArray = MarkedItemIdsL();
       
  1016         LmItemListProvider().SetOperationCmd( ERemoveFromCat );
       
  1017 		if (itemArray.Count() == 0)
       
  1018 			{
       
  1019 			TPosLmItemId id = SelectedIdL();
       
  1020 			itemArray.AppendL(id);
       
  1021 			}
       
  1022 			// The 10 value is set as standard to remove the multiple landmarks and new procedure for operation
       
  1023 		if( itemArray.Count() > 10)
       
  1024 			{
       
  1025         	LmItemListProvider().RemoveItemsL(itemArray,
       
  1026         								MLmkAOOperationObserver::ERemoveCategory,
       
  1027         								catId);
       
  1028 			return;
       
  1029 			}
       
  1030 		else
       
  1031 			{
       
  1032 			CPosLmCategoryManager* mgr = CPosLmCategoryManager::NewL( iDb );
       
  1033 			CleanupStack::PushL(mgr);
       
  1034 			CPosLmOperation* operation = mgr->RemoveCategoryFromLandmarksL(catId,itemArray);
       
  1035 			CleanupStack::PopAndDestroy();//mgr
       
  1036 			if (iOperation)
       
  1037 				{
       
  1038 				delete iOperation;
       
  1039 				iOperation = NULL;
       
  1040 				}
       
  1041 			iOperation = CLmkAOOperation::NewL(operation,
       
  1042 								*this,MLmkAOOperationObserver::ERemoveCategory,ETrue);
       
  1043 			iOperation->StartOperation();
       
  1044 			}
       
  1045 		}
       
  1046 	iCatRemoveFlag |= KRemoveOperationStarted;
       
  1047 	iWaitNote = new (ELeave) CAknWaitDialog(NULL, ETrue);
       
  1048 	if(!iWaitNote->ExecuteLD(R_LMK_PROCESSING_WAIT_NOTE))
       
  1049 		{
       
  1050 		if (iOperation)
       
  1051 			{
       
  1052 			delete iOperation;
       
  1053 			iOperation = NULL;
       
  1054 			}
       
  1055 		iWaitNote = NULL;
       
  1056 		}
       
  1057 	iCatRemoveFlag &= ~KRemoveOperationStarted;
       
  1058 	}
       
  1059 
       
  1060 
       
  1061 // -----------------------------------------------------------------------------
       
  1062 // CLmkAppLmSelectorImpl::IsCriteriaUnCategorizedCat
       
  1063 // -----------------------------------------------------------------------------
       
  1064 //
       
  1065 EXPORT_C TBool CLmkAppLmSelectorImpl::IsCriteriaUnCategorizedCat()
       
  1066 	{
       
  1067 	TBool result = EFalse;
       
  1068 	if (iCriteria && iCriteria->CategoryItemId() == KPosLmNullItemId)
       
  1069 		{
       
  1070 		result = ETrue;
       
  1071 		}
       
  1072 	return result;
       
  1073 	}
       
  1074 
       
  1075 // -----------------------------------------------------------------------------
       
  1076 // CLmkAppLmSelectorImpl::ServiceCmdByMenuCmd
       
  1077 // -----------------------------------------------------------------------------
       
  1078 //
       
  1079 TInt CLmkAppLmSelectorImpl::ServiceCmdByMenuCmd( TInt aMenuCmd )
       
  1080 	{
       
  1081 	return iLmkCallCmd->ServiceCmdByMenuCmd( aMenuCmd );
       
  1082 	}
       
  1083 
       
  1084 // -----------------------------------------------------------------------------
       
  1085 // CLmkAppLmSelectorImpl::CloseWaitNoteL
       
  1086 // -----------------------------------------------------------------------------
       
  1087 //
       
  1088 void CLmkAppLmSelectorImpl::CloseWaitNoteL()
       
  1089 	{
       
  1090 	iWaitNote->ProcessFinishedL();
       
  1091     iWaitNote = NULL;
       
  1092 	if (iOperation)
       
  1093 		{
       
  1094 		delete iOperation;
       
  1095 		iOperation = NULL;
       
  1096 		}
       
  1097 	}
       
  1098 
       
  1099 //  End of File
       
  1100