diff -r 000000000000 -r e686773b3f54 logsui/logsserviceextension/src/clogseventinfomanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logsserviceextension/src/clogseventinfomanager.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,303 @@ +/* +* Copyright (c) 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: Used to manage TLogsEventInfo objects +* +*/ + + + +// INCLUDE FILES +#include "clogseventinfomanager.h" +#include "tlogseventinfo.h" +#include "logsextconsts.h" +#include "simpledebug.h" + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CLogsEventInfoManager* CLogsEventInfoManager::NewL() + { + CLogsEventInfoManager* self = CLogsEventInfoManager::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// NewLC +// --------------------------------------------------------------------------- +// +CLogsEventInfoManager* CLogsEventInfoManager::NewLC() + { + CLogsEventInfoManager* self = new( ELeave ) CLogsEventInfoManager; + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// --------------------------------------------------------------------------- +// Descructor +// --------------------------------------------------------------------------- +// +CLogsEventInfoManager::~CLogsEventInfoManager() + { + _LOG("CLogsEventInfoManager::~CLogsEventInfoManager(): begin") + iEventInfoArray.ResetAndDestroy(); + _LOG("CLogsEventInfoManager::~CLogsEventInfoManager(): end") + } + + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CLogsEventInfoManager::CLogsEventInfoManager() + : iEventInfoArray( KEventInfoManagerArrayGranularity ) + { + } + + +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +// +void CLogsEventInfoManager::ConstructL() + { + _LOG("CLogsEventInfoManager::ConstructL(): begin") + _LOG("CLogsEventInfoManager::ConstructL(): end") + } + + +// --------------------------------------------------------------------------- +// Adds TLogsEventInfo entry to this manager.Manager takes ownership of the +// entry. Before adding the entry it is checked whether the entry already +// exists to avoid duplicates. Entries with the same service id are considered +// to be duplicates. +// --------------------------------------------------------------------------- +// +void CLogsEventInfoManager::AddEventEntryL( TUint32 aServiceId ) + { + _LOG("CLogsEventInfoManager::AddEventEntryL(): begin") + + if ( !EntryExists ( aServiceId ) ) + { + // Pc-lint warning: #429: Custodial pointer 'eventInfo'has not been + // freed or returned. + // Explanation: pointer ownership transferred to the array or deleted + // if transfer not successful + TLogsEventInfo* eventInfo = + new( ELeave ) TLogsEventInfo( aServiceId ); + + TInt error = iEventInfoArray.Append( eventInfo ); + if ( KErrNone != error ) + { + delete eventInfo; + eventInfo = NULL; + User::LeaveNoMemory(); + } + } + else + { + //entry exists already + User::Leave( KErrAlreadyExists ); + } + + _LOG("CLogsEventInfoManager::AddEventEntryL(): end ") + } + + +// --------------------------------------------------------------------------- +// Checks whether an entry exists for the specified service id +// --------------------------------------------------------------------------- +// +TBool CLogsEventInfoManager::EntryExists( TUint32 aServiceId ) + { + _LOGP("CLogsEventInfoManager::EntryExists(): begin=%d", aServiceId) + + TBool success( EFalse ); + for ( TInt i = 0 ; ( i < Count() ) && ( success == EFalse ) ; i++ ) + { + TLogsEventInfo* info = iEventInfoArray[i]; + if ( info && info->ServiceId() ) + { + if ( info->ServiceId() == aServiceId ) + { + success = ETrue; + } + } + } + + _LOG("CLogsEventInfoManager::EntryExists(): end") + return success; + } + + +// --------------------------------------------------------------------------- +// Get an TLogsEventInfo entry with the specified service id. Returns Null if +// such an entry does not exist. Ownership not transferred. +// --------------------------------------------------------------------------- +// +TLogsEventInfo* CLogsEventInfoManager::GetEventInfoEntry( + TUint32 aServiceId ) const + { + _LOG("CLogsEventInfoManager::GetEventInfoEntry(): begin") + + TLogsEventInfo* entry = NULL; + TBool success( EFalse ); + for ( TInt i = 0 ; ( i < Count() ) && ( success == EFalse ) ; i++ ) + { + TLogsEventInfo* info = iEventInfoArray[i]; + if ( info && info->ServiceId() ) + { + if ( info->ServiceId() == aServiceId ) + { + entry = info; + success = ETrue; + } + } + } + + _LOG("CLogsEventInfoManager::GetEventInfoEntry(): end") + return entry; + } + +// --------------------------------------------------------------------------- +// Get an TLogsEventInfo entry with the specified service id. Returns Null if +// such an entry does not exist. Ownership not transferred. +// --------------------------------------------------------------------------- +// +TLogsEventInfo* CLogsEventInfoManager::GetEventInfoEntryByIndex( + TInt aIndex ) const + { + _LOGP("CLogsEventInfoManager::GetEventInfoEntryByIndex():begin=%d",aIndex) + + TLogsEventInfo* entry = NULL; + + if ( aIndex >= 0 && aIndex < Count() ) + { + entry = iEventInfoArray[aIndex]; + } + + + _LOG("CLogsEventInfoManager::GetEventInfoEntryByIndex(): end") + return entry; + } + + +// --------------------------------------------------------------------------- +// Sets the brand icon index of the event info entry with a certain +// service id to 'aBrandingIconIndex'. +// --------------------------------------------------------------------------- +// +TInt CLogsEventInfoManager::SetBrandIndex( + TUint32 aServiceId, + TInt aBrandingIconIndex ) + { + _LOGPP("CLogsEventInfoManager::SetBrandIndex(): %d, %d", + aServiceId, aBrandingIconIndex) + TInt err( KErrNotFound ); + TLogsEventInfo* entry = GetEventInfoEntry( aServiceId ); + if ( entry ) + { + entry->SetBrandingIconIndex( aBrandingIconIndex ); + err = KErrNone; + } + + _LOGP("CLogsEventInfoManager::SetBrandIndex(): end return==%d",err) + return err; + } + + + +// --------------------------------------------------------------------------- +// The brand icon index for a log event with the specified service id +// is retrieved and assigned to 'aIndex'. +// --------------------------------------------------------------------------- +// +TBool CLogsEventInfoManager::GetBrandIconIndex( TUint32 aServiceId, + TInt& aIndex) const + { + _LOG("CLogsEventInfoManager::GetBrandIconIndex(): begin") + + TBool success( EFalse ); + + // find the entry that contains 'aServiceId' and return its brandindex + // or do nothing + for ( TInt i = 0 ; ( i < Count() ) && ( success == EFalse ) ; i++ ) + { + TLogsEventInfo* info = iEventInfoArray[i]; + if ( info && info->ServiceId() ) + { + if ( info->ServiceId() == aServiceId ) + { + aIndex = info->BrandingIconIndex(); + success = ETrue; + } + } + } + + _LOG("CLogsEventInfoManager::GetBrandIconIndex(): end") + return success; + } + + + +// --------------------------------------------------------------------------- +// Returns the number of TLogsEventInfo objects that the manager maintains +// --------------------------------------------------------------------------- +// +TInt CLogsEventInfoManager::Count() const + { + _LOGP("CLogsPresenceStatusTableEntry::Count(): =%d", + iEventInfoArray.Count()) + return iEventInfoArray.Count(); + } + + +// --------------------------------------------------------------------------- +// Check whether the brand icon index for the specified service +// id is already available or not. +// --------------------------------------------------------------------------- +// +TBool CLogsEventInfoManager::BrandIconIndexAvailable( + TUint32 aServiceId ) const + { + _LOG("CLogsEventInfoManager::BrandIconIndexAvailable(): begin") + + TBool result( EFalse ); + TInt brandIndex( KErrNotFound ); + if ( GetBrandIconIndex( aServiceId, brandIndex ) + && brandIndex > KInitialIndexValue ) + { + result = ETrue; + } + +#ifdef _DEBUG + if ( result ) + { + _LOG("CLogsEventInfoManager::BrandIconIndexAvailable(): end ...") + _LOG("...BrandIndex => available") + } + else + { + _LOG("CLogsEventInfoManager::BrandIconIndexAvailable(): end ...") + _LOG("...BrandIndex => NOT available") + } +#endif + + return result; + } +