diff -r 8173571d354e -r 1fc85118c3ae landmarksui/engine/src/CLmkLmItemListProvider.cpp --- a/landmarksui/engine/src/CLmkLmItemListProvider.cpp Thu Aug 19 09:48:36 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,418 +0,0 @@ -/* -* Copyright (c) 2002-2009 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: Base class landmarks list provider for listbox model -* -*/ - - -// SYSTEM INCLUDES -#include -#include -#include -#include - -// USER INCLUDES -#include "CLmkLmItemListProvider.h" -#include "MLmkListProviderObserver.h" -#include "CLmkDbUtils.h" -#include "CLmkDbInitializer.h" -#include "CLmkEventListenerSingleton.h" -#include "CLmkAOOperation.h" -#include "LmkConsts.h" -#include - -// CONSTANTS -/// Unnamed namespace for local definitions -namespace { - -_LIT( KPanicMsg, "CLmkLmItemListProvider" ); - -void Panic( TPanicCode aReason ) - { - User::Panic( KPanicMsg, aReason ); - } -} // namespace - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::CLmkLmItemListProvider -// C++ constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CLmkLmItemListProvider::CLmkLmItemListProvider( - CPosLandmarkDatabase& aDb ) - : iDb( aDb ), - iListAllItemsInDb( ETrue ), - iIdArray( KLmItemArrayGranularity ), - iSelectedItemsCount( 0 ), iCount( 0 ), - iRequestFromFindBox(EFalse), - iOperationNotInUse( ETrue ), - iOperationCmd( ELmkCmdStopOperation ), //temp default value - iSelectedForDelete(KLmItemArrayGranularity), - iItemsToDelete( 0 ), - iItemsDeleted( 0 ), - iIsRemoveLandmarks( EFalse ), - iCategoryId(KPosLmNullItemId) - { - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CLmkLmItemListProvider::BaseConstructL() - { - // Create db utils, request callback only when operations completed: - iDbUtils = CLmkDbUtils::NewL( iDb, *this, EFalse ); - //Create landmark array, which will hold all those landmarks, which belong - //to one category and needs icon change. - iIconChangeLmkArray = new(ELeave) RPointerArray; - // base class 2nd phase constructor - CLmkListProviderBase::BaseConstructL(); - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::~CLmkLmItemListProvider -// ----------------------------------------------------------------------------- -// -CLmkLmItemListProvider::~CLmkLmItemListProvider() - { - if ( iWaitNote ) - { - TRAPD( err, iWaitNote->ProcessFinishedL() ); - if (err != KErrNone) - { - delete iWaitNote; - iWaitNote = NULL; - } - } - // Stop db event observing: - CLmkEventListenerSingleton::RemoveObserver( *this ); - if (iIconChangeLmkArray) - { - iIconChangeLmkArray->ResetAndDestroy(); - delete iIconChangeLmkArray; - } - delete iInitializer; - delete iDbUtils; - - iSelectedForDelete.Close(); - iIdArray.Close(); - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::SelectedIndexesL -// ----------------------------------------------------------------------------- -// -EXPORT_C CArrayFix* CLmkLmItemListProvider::SelectedIndexesL( - const RArray& aSelectedItems ) const - { - CArrayFix* array = NULL; - TInt count = aSelectedItems.Count(); - if ( count < KLmkMultiSelectionGranularity ) - { // decent minimum granularity because of possible user selections - array = - new ( ELeave ) CArrayFixFlat( KLmkMultiSelectionGranularity ); - } - else - { - array = new ( ELeave ) CArrayFixFlat( aSelectedItems.Count() ); - } - CleanupStack::PushL( array ); - - GetSelectedIndexesL( *array, aSelectedItems ); - - CleanupStack::Pop( array ); - return array; - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::GetSelectedIndexesL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkLmItemListProvider::GetSelectedIndexesL( - CArrayFix& aSelectedIndexes, - const RArray& aSelectedItems ) const - { - aSelectedIndexes.Reset(); - TInt count = aSelectedItems.Count(); - for ( TInt i( 0 ); i < count; ++i ) - { - TInt index = iIdArray.Find( aSelectedItems[i] ); - if ( index >= 0 ) - { // item found --> append it's index - aSelectedIndexes.AppendL( index ); - } - } - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::GetSelectedItemIdsL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkLmItemListProvider::GetSelectedItemIdsL( - RArray& aSelectedItems, - const CArrayFix& aSelectedIndexes ) const - { - aSelectedItems.Reset(); - TInt itemCount = iIdArray.Count(); - TInt selectionCount = aSelectedIndexes.Count(); - - for ( TInt i( 0 ); i < selectionCount; ++i ) - { - TInt index = aSelectedIndexes[i]; - __ASSERT_ALWAYS( index >= 0 && index < itemCount, - Panic( KLmkPanicInvalidIndex ) ); - - User::LeaveIfError( aSelectedItems.Append( iIdArray[index] ) ); - } - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::GetAllItemIdsL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkLmItemListProvider::GetAllItemIdsL( - RArray& aSelectedItems ) const - { - aSelectedItems.Reset(); - TInt itemCount = iIdArray.Count(); - - for ( TInt i( 0 ); i < itemCount; ++i ) - { - User::LeaveIfError( aSelectedItems.Append( iIdArray[i] ) ); - } - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::SelectedIndex -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CLmkLmItemListProvider::SelectedIndex( - TPosLmItemId aSelectedItem ) const - { - return iIdArray.Find( aSelectedItem ); - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::GetSelectedItemId -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkLmItemListProvider::GetSelectedItemId( - TPosLmItemId& aSelected, - TInt aIndex ) const - { - __ASSERT_ALWAYS( aIndex >= 0 && aIndex < iIdArray.Count(), - Panic( KLmkPanicInvalidIndex ) ); - - aSelected = iIdArray[aIndex]; - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::SetSelectedItemsCount -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkLmItemListProvider::SetSelectedItemsCount( TInt aSelectedItemsCount ) - { - iSelectedItemsCount = aSelectedItemsCount; - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::RemoveItem -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkLmItemListProvider::RemoveItem( TPosLmItemId aItemId ) - { - TInt index = iIdArray.Find(aItemId); - if( index != KErrNotFound && index < iIdArray.Count()) - { - iIdArray.Remove(index); - NotifyObservers( ELmkEventListReady ); - } - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::RemoveItemsL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkLmItemListProvider::RemoveItemsL( - const RArray& aSelectedItems, - MLmkAOOperationObserver::TOperationTypes aType, - TPosLmItemId aCategoryId ) - { - iCategoryId = aCategoryId; - iType = aType; - RemoveLandmarksL(aSelectedItems); - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::SetOperationCmd -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkLmItemListProvider::SetOperationCmd( TLmkAppCmdId aOperationCmd ) - { - iOperationCmd = aOperationCmd; - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::InitializeL -// ----------------------------------------------------------------------------- -// -void CLmkLmItemListProvider::InitializeL() - { - __ASSERT_DEBUG( !iInitializer, Panic( KLmkPanicIllegalMethodCall ) ); - // We don't want intermediate callbacks -> 3rd parameter EFalse - iInitializer = CLmkDbInitializer::NewL( iDb, *this, EFalse ); - iInitializer->StartInitAndCompactL(); - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::StartSearchingLandmarksL() -// ----------------------------------------------------------------------------- -// -TBool CLmkLmItemListProvider::StartSearchingLandmarksL( - const TDesC& aSearchPattern, - TBool aSearchOnlyInPreviousMatches) - { - iRequestFromFindBox = ETrue; - return PrepareListL(aSearchPattern, aSearchOnlyInPreviousMatches); - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::ItemCount -// ----------------------------------------------------------------------------- -// -TInt CLmkLmItemListProvider::ItemCount() const - { - return iIdArray.Count(); - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::HandleOperationL -// ----------------------------------------------------------------------------- -// -void CLmkLmItemListProvider::HandleOperationL( - TOperationTypes /*aType*/, - TReal32 /*aProgress*/, - TInt aStatus ) - { - __ASSERT_DEBUG( aStatus != KPosLmOperationNotComplete, - Panic( KLmkPanicIntermediateCallback ) ); - - // init and compact completed, delete unnecessary helper object: - delete iInitializer; - iInitializer = NULL; - - TInt err( aStatus ); - - if ( aStatus == KErrNone ) - { - TRAP( err, HandleDatabaseInitializedL() ); - } - - if ( err != KErrNone ) - { // Error already in aStatus or within this method - HandleError( err ); - } - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::HandleDatabaseInitializedL -// ----------------------------------------------------------------------------- -// -void CLmkLmItemListProvider::HandleDatabaseInitializedL() - { - // Start db event observing: - CLmkEventListenerSingleton::AddObserverL( *this, iDb ); - - iRequestFromFindBox = EFalse; - - // Call provider-specific templated method for preparing list: - PrepareListL(); - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::HandleError -// ----------------------------------------------------------------------------- -// -void CLmkLmItemListProvider::HandleError( TInt aError ) - { - if ( aError != KErrNone ) - { - NotifyError( aError ); - } - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::HandleDatabaseEvent -// ----------------------------------------------------------------------------- -// -void CLmkLmItemListProvider::HandleDatabaseEvent( TPosLmEvent& aEvent ) - { - switch ( aEvent.iEventType ) - { - case EPosLmEventNewDefaultDatabaseLocation: - case EPosLmEventMediaRemoved: - { - //TODO: - break; - } - default: - { - //TODO: - // not interesting event for this class - break; - } - } - } - -// ----------------------------------------------------------------------------- -// CLmkLmItemListProvider::GetLandmarkLC -// ----------------------------------------------------------------------------- -// -CPosLandmark* CLmkLmItemListProvider::GetLandmarkLC(TInt aIndex) - { - RArray itemArray; - CPosLandmark* landmark = iDb.ReadPartialLandmarkLC( iIdArray[aIndex] ); - //check whether landmark is associated with more than one cat. - landmark->GetCategoriesL(itemArray); - if (itemArray.Count() == 1) - { - //if associated with one cat, check if the icon is not set by the - //user explicitly - TPtrC iconPath; - TInt iconId; - TInt iconMaskIndex; - if (landmark->GetIcon(iconPath,iconId, iconMaskIndex)) - { - //lmk has one cat & icon is not set by the user: - CPosLmCategoryManager* categoryMgr = CPosLmCategoryManager::NewL(iDb); - CleanupStack::PushL( categoryMgr ); - CPosLandmarkCategory* category = categoryMgr->ReadCategoryLC( itemArray[0] ); - //get the cat icon and set it as landmark icon only for display - if (category->GetIcon(iconPath,iconId, iconMaskIndex) == KErrNone ) - { - landmark->SetIconL(iconPath,iconId,iconMaskIndex); - } - CleanupStack::PopAndDestroy();//category - CleanupStack::PopAndDestroy();//categoryMgr - } - } - itemArray.Close(); - return landmark; - } -// End of File