bluetoothengine/btui/Ecom/inc/bluetoothuiutil.inl
branchRCL_3
changeset 23 9386f31cc85b
parent 6 6a29d5ad0713
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btui/Ecom/inc/bluetoothuiutil.inl	Wed Sep 01 12:20:04 2010 +0100
@@ -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 "%<aKey>" (%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 "[<chars>]" 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
+