phonebookui/Phonebook/PbkEngine_FM/src/Cfmpbkengineextension.cpp
changeset 0 e686773b3f54
child 68 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook/PbkEngine_FM/src/Cfmpbkengineextension.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,348 @@
+/*
+* Copyright (c) 2002 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:  Implementation for CFmPbkEngineExtension.
+*
+*/
+
+
+
+// INCLUDES
+#include "Cfmpbkengineextension.h"
+#include <PbkEngine_FMRes.rsg> // Common for all langugages
+#include <barsc.h>
+#include <bautils.h>
+#include <featmgr.h>
+
+#include <bldvariant.hrh>
+#include "PbkDataCaging.hrh"
+
+#include <CPbkConstants.h>
+#include <PbkEngUtils.h>
+#include <PhonebookVariant.hrh>
+#include "PbkFieldInfoWrite.h"
+#include "CPbkFieldsInfo.h"
+#include "CPbkFieldInfoGroup.h"
+#include <PbkConfig.hrh>
+
+/// Unnamed namespace for local definitions
+namespace {
+
+_LIT(KFmResFileName, "PbkEngine_FMRes.RSC"); // default resource file name
+_LIT(KFmResChineseFileName, "PbkEngine_FMChineseRes.RSC"); // Chinese variant
+_LIT(KFmResJapaneseFileName, "PbkEngine_FMJapaneseRes.RSC"); // Japanese
+
+enum TFieldType
+    {
+    ENickNameFieldType = 0,
+    EVideoTelephonyFieldType,
+    EJapaneseReadingFieldType,
+    EVOIPFieldType,
+    EPOCFieldType,
+    EShareviewFieldType,
+    ESIPFieldType,
+    EOldVOIPFieldType,
+    EOldPOCFieldType,
+    EOldShareviewFieldType,
+    ECODFieldType,
+    EPrefixFieldType,
+    ESuffixFieldType,
+    EMegaOperatorFieldType,
+    ELastFieldType // Must be last, used to indicate number of field types
+    };
+
+#ifdef _DEBUG
+
+enum TPanicCode
+    {
+    EPanicPreCond_ConstructL = 1,
+    EPanicPreCond_NewL
+    };
+
+void Panic(TPanicCode aPanicCode)
+    {
+    _LIT(KPanicText, "CFmPbkEngineExtension");
+    User::Panic(KPanicText, aPanicCode);
+    };
+
+#endif // _DEBUG
+
+/**
+ * Solves correct language specific FM engine's resource filename. 
+ *
+ * @return A reference to resource file
+ */
+inline const TDesC& FmResFileName()
+    {
+    if (FeatureManager::FeatureSupported(KFeatureIdChinese))
+        {
+        return KFmResChineseFileName;
+        }
+    else if (FeatureManager::FeatureSupported(KFeatureIdJapanese))
+        {
+        return KFmResJapaneseFileName;
+        }
+    return KFmResFileName;
+    }
+
+
+} // namespace
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+inline CFmPbkEngineExtension::CFmPbkEngineExtension()
+    {
+    }
+
+inline void CFmPbkEngineExtension::ConstructL(
+        const CPbkEngineExtensionInterface::TEngExtParams& aParam)
+    {
+    __ASSERT_DEBUG(aParam.iFs, Panic(EPanicPreCond_ConstructL));
+
+    iFs = *aParam.iFs;
+    RResourceFile pbkResFile;
+    
+    PbkEngUtils::FindAndOpenDefaultResourceFileLC(iFs,pbkResFile);
+    pbkResFile.ConfirmSignatureL();
+
+    iConstants = CPbkConstants::NewL(pbkResFile);
+
+    CleanupStack::PopAndDestroy();  // pbkResFile
+
+    PbkEngUtils::FindAndOpenResourceFileLC
+        (iFs, FmResFileName(), KDC_RESOURCE_FILES_DIR, KPbkRomFileDrive, iResourceFile);
+    iResourceFile.ConfirmSignatureL(0);
+    CleanupStack::Pop();
+    }
+
+CFmPbkEngineExtension* CFmPbkEngineExtension::NewL(TAny* aParam)
+    {
+    __ASSERT_DEBUG(aParam, Panic(EPanicPreCond_NewL));
+    CFmPbkEngineExtension* self = new (ELeave) CFmPbkEngineExtension;
+    CleanupStack::PushL(self);
+    self->ConstructL(*static_cast<CPbkEngineExtensionInterface::TEngExtParams*>(aParam));
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CFmPbkEngineExtension::~CFmPbkEngineExtension()
+    {
+    delete iConstants;
+    iResourceFile.Close();
+    }
+
+TBool CFmPbkEngineExtension::GetAdditionalFieldTypesResourceL
+        (TFieldTypeResource& aResource)
+    {
+    TBool result = EFalse;
+
+    switch (iCurrentResourceIndex)
+        {
+        case ENickNameFieldType:
+            {
+            if (iConstants->
+                    LocallyVariatedFeatureEnabled(EPbkLVAddNickNameField))
+                {
+                GetFieldTypeL(aResource,
+                              R_PHONEBOOK_ADD_NICK_NAME_FIELD_PROPERTIES,
+                              R_CNTUI_ADD_NICK_NAME_FIELD_DEFNS);
+                result = ETrue;
+                }
+            break;
+            }
+        case EVideoTelephonyFieldType:
+            {
+            if (iConstants->
+                    LocallyVariatedFeatureEnabled(EPbkLVAddVideoTelephonyFields))
+                {
+                GetFieldTypeL(aResource,
+                              R_PHONEBOOK_ADD_VIDEO_TELEPHONY_FIELD_PROPERTIES,
+                              R_CNTUI_ADD_VIDEO_TELEPHONY_FIELD_DEFNS);
+                result = ETrue;
+                }
+            break;
+            }
+        case EJapaneseReadingFieldType:
+            {
+            if (FeatureManager::FeatureSupported(KFeatureIdJapanese))
+                {
+                GetFieldTypeL(aResource,
+                              R_PHONEBOOK_ADD_JAPANESE_READING_FIELD_PROPERTIES,
+                              R_CNTUI_ADD_JAPANESE_READING_FIELD_DEFNS);
+                result = ETrue;
+                }
+            break;
+            }
+        case EVOIPFieldType:
+            {
+            if (iConstants->LocallyVariatedFeatureEnabled(EPbkLVVOIP))
+                {
+                GetFieldTypeL(aResource,
+                              R_PHONEBOOK_ADD_VOIP_FIELD_PROPERTIES,
+                              R_CNTUI_ADD_VOIP_FIELD_DEFNS);
+                result = ETrue;
+                }
+            break;
+            }
+        case EPOCFieldType:
+            {
+            if (iConstants->LocallyVariatedFeatureEnabled(EPbkLVPOC))
+                {
+                GetFieldTypeL(aResource,
+                              R_PHONEBOOK_ADD_POC_FIELD_PROPERTIES,
+                              R_CNTUI_ADD_POC_FIELD_DEFNS);
+                result = ETrue;
+                }
+            break;
+            }
+        case EShareviewFieldType:
+            {
+            if (iConstants->LocallyVariatedFeatureEnabled(EPbkLVShareView))
+                {
+                GetFieldTypeL(aResource,
+                              R_PHONEBOOK_ADD_SHARE_VIEW_FIELD_PROPERTIES,
+                              R_CNTUI_ADD_SHARE_VIEW_FIELD_DEFNS);
+                result = ETrue;
+                }
+            break;
+            }
+        case ESIPFieldType:
+            {
+            if (iConstants->LocallyVariatedFeatureEnabled(EPbkLVAddSIPFields))
+                {
+                GetFieldTypeL(aResource,
+                              R_PHONEBOOK_ADD_SIP_FIELD_PROPERTIES,
+                              R_CNTUI_ADD_SIP_FIELD_DEFNS);
+                result = ETrue;
+                }
+            break;
+            }
+        case EOldVOIPFieldType:
+            {
+            if (iConstants->LocallyVariatedFeatureEnabled(EPbkLVVOIP))
+                {
+                GetFieldTypeL(aResource,
+                              R_PHONEBOOK_ADD_OLD_VOIP_FIELD_PROPERTIES,
+                              R_CNTUI_ADD_OLD_VOIP_FIELD_DEFNS);
+                result = ETrue;
+                }
+            break;
+            }
+        case EOldPOCFieldType:
+            {
+            if (iConstants->LocallyVariatedFeatureEnabled(EPbkLVPOC))
+                {
+                GetFieldTypeL(aResource,
+                              R_PHONEBOOK_ADD_OLD_POC_FIELD_PROPERTIES,
+                              R_CNTUI_ADD_OLD_POC_FIELD_DEFNS);
+                result = ETrue;
+                }
+            break;
+            }
+        case EOldShareviewFieldType:
+            {
+            if (iConstants->LocallyVariatedFeatureEnabled(EPbkLVShareView))
+                {
+                GetFieldTypeL(aResource,
+                              R_PHONEBOOK_ADD_OLD_SHARE_VIEW_FIELD_PROPERTIES,
+                              R_CNTUI_ADD_OLD_SHARE_VIEW_FIELD_DEFNS);
+                result = ETrue;
+                }
+            break;
+            }
+        case ECODFieldType:
+            {
+            if (FeatureManager::FeatureSupported(KFeatureIdCallImagetext))
+                {
+                GetFieldTypeL(aResource,
+                    R_PHONEBOOK_ADD_COD_FIELD_PROPERTIES,
+                    R_CNTUI_ADD_COD_FIELD_DEFNS );
+                result = ETrue;
+                }
+            break;
+            }
+        case EPrefixFieldType:
+            {
+            if (iConstants->
+                    LocallyVariatedFeatureEnabled(EPbkLVAddMDOFields))
+                {
+                GetFieldTypeL(aResource,
+                              R_PHONEBOOK_ADD_PREFIX_FIELD_PROPERTIES,
+                              R_CNTUI_ADD_PREFIX_FIELD_DEFNS);
+                result = ETrue;
+                }
+            break;
+            }
+
+        case ESuffixFieldType:
+            {
+            if (iConstants->
+                    LocallyVariatedFeatureEnabled(EPbkLVAddMDOFields))
+                {
+                GetFieldTypeL(aResource,
+                              R_PHONEBOOK_ADD_SUFFIX_FIELD_PROPERTIES,
+                              R_CNTUI_ADD_SUFFIX_FIELD_DEFNS);
+                result = ETrue;
+                }
+            break;
+            }
+
+        case EMegaOperatorFieldType:
+            {
+            if (iConstants->
+                    LocallyVariatedFeatureEnabled(EVPbkLVMegaOperatorFields))
+                {
+                GetFieldTypeL(aResource,
+                              R_PHONEBOOOK_ADD_MEGAOP_FIELD_PROPERTIES,
+                              R_CNTUI_ADD_MEGAOP_FIELD_DEFNS);
+                result = ETrue;
+                }
+            break;
+            }
+
+        default:
+            {
+            // no other possible field types
+            break;
+            }
+        }
+
+    ++iCurrentResourceIndex;
+    return result;
+    }
+
+void CFmPbkEngineExtension::GetFieldTypeL
+        (TFieldTypeResource& aResource,
+        TInt aPbkResId,
+        TInt aCntResId)
+    {
+    HBufC8* pbkResBuffer = iResourceFile.AllocReadLC(aPbkResId);
+    HBufC8* cntResBuffer = iResourceFile.AllocReadLC(aCntResId);
+    aResource.iPbkRes = pbkResBuffer;
+    aResource.iCntModelRes = cntResBuffer;
+    CleanupStack::Pop(cntResBuffer);
+    CleanupStack::Pop(pbkResBuffer);
+    }
+
+TBool CFmPbkEngineExtension::ModifyFieldTypesL(CPbkFieldsInfo& /*aFieldsInfo*/)
+    {
+    return EFalse;
+    }
+
+TInt CFmPbkEngineExtension::AdditionalFieldTypesResourceCount() const
+    {
+    return ELastFieldType;
+    }
+
+// End of file