diff -r 0b192a3a05a4 -r 00f9ee97d895 bluetoothengine/btui/Ecom/inc/bluetoothuiutil.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/Ecom/inc/bluetoothuiutil.inl Fri Apr 16 15:08:36 2010 +0300 @@ -0,0 +1,103 @@ +/* +* Copyright (c) 2010 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: This provides utility for loading a BT device name without +* localised to a string to be shown in GUI. +* +*/ + +inline TInt BluetoothUiUtil::GetSubstringKeyPos( + const TDes& aDes, const TDesC& aKey, + TInt aKeyPos, TInt& aKeyLength ) + { + ASSERT( aKeyPos > KErrNotFound ); + _LIT(KPercentSymbol, "%" ); + // 32 would be to fit any key substring in practice: + TBuf<32> key; + TInt pos( KErrNotFound ); + // if the specified position is 0, check if "%" (%U or %N) exists. + if ( aKeyPos == 0 ) + { + key.Copy( KPercentSymbol ); + key.Append(aKey); + pos = aDes.Find( key ); + } + // Either the key is not found, or aKeyPos is not 0. + if ( pos == KErrNotFound ) + { + key.Copy( KPercentSymbol ); + key.AppendNum( aKeyPos ); + key.Append( aKey ); + pos = aDes.Find( key ); + } + if ( pos > KErrNotFound ) + { + aKeyLength = key.Length(); + } + return pos; + } + +inline TInt BluetoothUiUtil::GetStringSubstringKeyPos( + const TDes& aDes, TInt aKeyPos, TInt& aKeyLength ) + { + _LIT(KStringKeyword,"U"); + TPtrC ptr( KStringKeyword ); + return GetSubstringKeyPos(aDes, ptr, aKeyPos, aKeyLength ); + } + +inline void BluetoothUiUtil::AddSubstringL( + RBuf& aBuf, const TDesC& aSub, TInt aSubPos) + { + // Find the position of the specified "%U" or %[0-9]U in aBuf. + TInt keyLength; + TInt pos = GetStringSubstringKeyPos( aBuf, aSubPos, keyLength ); + if ( pos == KErrNotFound ) + { + User::Leave( pos ); + } + // Enlarge the max length of aBuf if needed: + TInt reqedLen = aBuf.Length() - keyLength + aSub.Length(); + if ( aBuf.MaxLength() < reqedLen ) + { + aBuf.ReAllocL( reqedLen ); + } + aBuf.Replace( pos, keyLength, aSub ); + } + +inline void BluetoothUiUtil::LoadResourceAndSubstringL(RBuf& aBuf, + TInt aResourceId, const TDesC& aSub, TInt aSubPos ) + { + HBufC* string = StringLoader::LoadL( aResourceId ); + aBuf.Assign( string ); + // Logical loc strings may contain redundant "[]" for some reason. + // This sub-string should be removed in our ad hoc parameter loading method. + _LIT( KLeftSquareBracket,"[" ); + _LIT( KRightSquareBracket,"]" ); + while ( 1 ) + { + TInt lpos = aBuf.Find( KLeftSquareBracket ); + TInt rpos = aBuf.Find( KRightSquareBracket ); + if ( lpos > KErrNotFound && rpos > KErrNotFound && ( rpos > lpos ) ) + { + aBuf.Delete(lpos, rpos - lpos + 1 ); + continue; + } + // No sub-strings that match "[" and ends with "]". Done + break; + } + // Add the substring to this string loaded from resource: + AddSubstringL( aBuf, aSub, aSubPos ); + } + +// End of File +