phonebookui/Phonebook2/Presentation/src/RPbk2LocalizedResourceFile.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/Presentation/src/RPbk2LocalizedResourceFile.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,188 @@
+/*
+* Copyright (c) 2002-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: 
+*     Localized resource file for Phonebook 2.
+*
+*/
+
+
+// INCLUDE FILES
+#include <RPbk2LocalizedResourceFile.h>
+
+// From System
+#include <coemain.h>
+#include <bautils.h>
+
+// Debugging headers
+#include <Pbk2Debug.h>
+
+// Unnamed namespace for local definitions
+namespace {
+// Definition for backslash
+_LIT(KBackslash, "\\");
+
+/**
+ * Ensures that path includes backslashs in correct places. Either left hand
+ * side descriptor's or right hand side's last descriptor needs to be 
+ * backslash. If backslash is not found, it is added to result descriptor
+ *
+ * @param aLhs      Left hand side operator.
+ * @param aRhs      Right hand side operator.
+ * @param aResult   On return contains correctly modified descriptor.
+ */
+void EnsureBackslashInMiddle(
+        const TDesC& aLhs, 
+        const TDesC& aRhs, 
+        TDes& aResult)
+    {
+    if (aLhs[aLhs.Length() - 1] != KBackslash()[0] &&
+        (aRhs.Length() == 0 || aRhs[0] != KBackslash()[0]))
+        {
+        aResult.Append(KBackslash);
+        }
+    }
+} // namespace
+
+// ================= MEMBER FUNCTIONS =======================
+
+// --------------------------------------------------------------------------
+// RPbk2LocalizedResourceFile::RPbk2LocalizedResourceFile
+// --------------------------------------------------------------------------
+//
+EXPORT_C RPbk2LocalizedResourceFile::RPbk2LocalizedResourceFile(
+        CCoeEnv& aCoeEnv) :
+    iFs( &aCoeEnv.FsSession() ), iCoeEnv(&aCoeEnv), iOffset(0)
+    {
+    }
+
+// --------------------------------------------------------------------------
+// RPbk2LocalizedResourceFile::RPbk2LocalizedResourceFile
+// --------------------------------------------------------------------------
+//
+EXPORT_C RPbk2LocalizedResourceFile::RPbk2LocalizedResourceFile( RFs* aFs ) :
+        iFs( aFs ), iCoeEnv( NULL ), iOffset( 0 )
+    {
+    }
+    
+// --------------------------------------------------------------------------
+// RPbk2LocalizedResourceFile::OpenLC
+// --------------------------------------------------------------------------
+//
+EXPORT_C void RPbk2LocalizedResourceFile::OpenLC
+        (const TDesC& aDrive, const TDesC& aPath, const TDesC& aFileName)
+    {
+    EnsureOpenFileSystemSessionL();
+    
+    TFileName fileName(aDrive);
+    EnsureBackslashInMiddle(fileName, aPath, fileName);
+    fileName.Append(aPath);
+    EnsureBackslashInMiddle(fileName, aFileName, fileName);
+    fileName.Append(aFileName);
+
+    PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
+        ("RPbk2LocalizedResourceFile::OpenLC() resource filename: %S"),
+        &fileName);
+
+    BaflUtils::NearestLanguageFile(*iFs, fileName);
+    
+    if ( iCoeEnv )
+        {
+        iOffset = iCoeEnv->AddResourceFileL(fileName);
+        CleanupClosePushL(*this);
+        }
+    else
+        {
+        RResourceFile::OpenL(*iFs, fileName);
+        CleanupClosePushL(*this);
+        ConfirmSignatureL();
+        }
+    }
+
+// --------------------------------------------------------------------------
+// RPbk2LocalizedResourceFile::OpenL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void RPbk2LocalizedResourceFile::OpenL
+        (const TDesC& aDrive, const TDesC& aPath, const TDesC& aFileName)
+    {
+    OpenLC(aDrive, aPath, aFileName);
+    CleanupStack::Pop();
+    }
+
+// --------------------------------------------------------------------------
+// RPbk2LocalizedResourceFile::OpenL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void RPbk2LocalizedResourceFile::OpenL(const TDesC& aFullPath)
+    {
+    EnsureOpenFileSystemSessionL();
+    
+    TFileName fileName(aFullPath);
+
+    BaflUtils::NearestLanguageFile(*iFs, fileName);
+    if ( iCoeEnv )
+        {
+        iOffset = iCoeEnv->AddResourceFileL(fileName);
+        }
+    else
+        {
+        RResourceFile::OpenL(*iFs, fileName);
+        ConfirmSignatureL();
+        }
+    }
+
+// --------------------------------------------------------------------------
+// RPbk2LocalizedResourceFile::Close
+// --------------------------------------------------------------------------
+//
+EXPORT_C void RPbk2LocalizedResourceFile::Close()
+    {
+    if (iOffset && iCoeEnv)
+        {
+        iCoeEnv->DeleteResourceFile(iOffset);
+        iOffset = 0;
+        }
+    else
+        {
+        RResourceFile::Close();
+        }
+    
+    if ( iOwnFs.Handle() )
+        {
+        iOwnFs.Close();
+        }
+    }
+
+// --------------------------------------------------------------------------
+// RPbk2LocalizedResourceFile::Offset
+// --------------------------------------------------------------------------
+//
+EXPORT_C TInt RPbk2LocalizedResourceFile::Offset()
+    {
+    return iOffset;
+    }
+
+// --------------------------------------------------------------------------
+// RPbk2LocalizedResourceFile::EnsureOpenFileSystemSessionL
+// --------------------------------------------------------------------------
+//
+void RPbk2LocalizedResourceFile::EnsureOpenFileSystemSessionL()
+    {
+    if ( !iFs )
+        {
+        User::LeaveIfError( iOwnFs.Connect() );
+        iFs = &iOwnFs;
+        }
+    }
+// End of File