phonebookui/Phonebook2/UIExtensionManager/src/CPbk2UIExtensionInformation.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/UIExtensionManager/src/CPbk2UIExtensionInformation.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,390 @@
+/*
+* Copyright (c) 2005-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:  Phonebook 2 UI Extension information.
+*
+*/
+
+
+#include "CPbk2UIExtensionInformation.h"
+
+// Phonebook 2
+#include "CPbk2UIExtensionMenu.h"
+#include "CPbk2UIExtensionIconInformation.h"
+
+// System includes
+#include <barsread.h>
+#include <coemain.h>
+
+#include <Pbk2Debug.h>
+
+/// Unnamed namespace for local definitions
+namespace {
+
+const TInt KPbk2UIExtensionInformationOffset = 2;
+
+#ifdef _DEBUG
+enum TPanicCode
+    {
+    EPreCond_IconInformation
+    };
+    
+void Panic(TPanicCode aPanicCode)
+    {
+    _LIT(KPanicText, "CPbk2UIExtensionInformation");
+    User::Panic(KPanicText, aPanicCode);
+    }
+#endif // _DEBUG
+
+} /// namespace
+
+
+// --------------------------------------------------------------------------
+// TPbk2UIExtensionViewId::TPbk2UIExtensionViewId
+// --------------------------------------------------------------------------
+//
+TPbk2UIExtensionViewId::TPbk2UIExtensionViewId
+        ( TResourceReader& aReader )
+    {
+    aReader.ReadInt8(); // read version number
+    iViewId = TUid::Uid(aReader.ReadInt32());
+    iViewResourceId = aReader.ReadInt32();
+    PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING(
+        "TPbk2UIExtensionViewId::TPbk2UIExtensionViewId, id:%d, resId %d"), 
+            iViewId.iUid, iViewResourceId );
+    }
+
+// --------------------------------------------------------------------------
+// TPbk2UIExtensionViewId::TPbk2UIExtensionViewId
+// --------------------------------------------------------------------------
+//
+EXPORT_C TPbk2UIExtensionViewId::TPbk2UIExtensionViewId(
+        TUid aViewId, 
+        TInt aViewResourceId) :
+    iViewId(aViewId),
+    iViewResourceId(aViewResourceId)
+    {
+    }
+
+// --------------------------------------------------------------------------
+// TPbk2UIExtensionViewId::ViewId
+// --------------------------------------------------------------------------
+//
+TUid TPbk2UIExtensionViewId::ViewId() const
+    {
+    return iViewId;
+    }
+
+// --------------------------------------------------------------------------
+// TPbk2UIExtensionViewId::ViewResourceId
+// --------------------------------------------------------------------------
+//
+TInt TPbk2UIExtensionViewId::ViewResourceId() const
+    {
+    return iViewResourceId;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::CPbk2UIExtensionInformation
+// --------------------------------------------------------------------------
+//
+CPbk2UIExtensionInformation::CPbk2UIExtensionInformation() :
+        iResourceFile( *CCoeEnv::Static() )
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::~CPbk2UIExtensionInformation
+// --------------------------------------------------------------------------
+//
+CPbk2UIExtensionInformation::~CPbk2UIExtensionInformation()
+    {
+    iMenus.ResetAndDestroy();
+    iResourceFile.Close();
+    iViewIds.Close();
+    delete iIconInformation;
+    iOverWrittenCmds.Close();
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::NewLC
+// --------------------------------------------------------------------------
+//
+CPbk2UIExtensionInformation* CPbk2UIExtensionInformation::NewLC
+        ( const TDesC& aFileName )
+    {
+    CPbk2UIExtensionInformation* self =
+        new ( ELeave ) CPbk2UIExtensionInformation;
+    CleanupStack::PushL( self );
+    self->ConstructL( aFileName );
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::ConstructL
+// Reads the extension information resource structure
+// --------------------------------------------------------------------------
+//
+inline void CPbk2UIExtensionInformation::ConstructL
+        ( const TDesC& aFileName )
+    {
+    PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING(
+        "CPbk2UIExtensionInformation::ConstructL(0x%x) START"), this );
+            
+    iResourceFile.OpenL(aFileName);
+    
+    PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING(
+        "CPbk2UIExtensionInformation::ConstructL, resFile %S opened"), 
+            &aFileName );
+            
+    TResourceReader reader;
+    CCoeEnv::Static()->CreateResourceReaderLC( reader,
+        iResourceFile.Offset() + KPbk2UIExtensionInformationOffset );
+    
+    PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING(
+        "CPbk2UIExtensionInformation::ConstructL, reader initialized") );
+
+    reader.ReadInt8(); // read version number, ignored for now
+    
+    iImplementationUid = TUid::Uid( reader.ReadInt32() );
+    PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING(
+        "CPbk2UIExtensionInformation::ConstructL, implUid %x"), 
+        iImplementationUid.iUid );
+        
+    iLoadingPolicy = reader.ReadInt32();
+    PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING(
+        "CPbk2UIExtensionInformation::ConstructL, loadingPolicy %b"), 
+        iLoadingPolicy );
+        
+    iMenuCommandRange.ReadFromResource( reader );
+
+    // Overwritten Phonebook 2 command ids
+    const TInt commandIdCount = reader.ReadInt16();
+    PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING(
+        "CPbk2UIExtensionInformation::ConstructL, num of overwritten Cmds:%d"), 
+            commandIdCount );
+    for ( TInt i = 0; i < commandIdCount; ++i )
+        {
+        iOverWrittenCmds.AppendL( reader.ReadInt16() );
+        PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING(
+        "CPbk2UIExtensionInformation::ConstructL, Overwrites Cmd: %d"), 
+            iOverWrittenCmds[iOverWrittenCmds.Count() - 1] );
+        }
+
+    // Menu definitions
+    const TInt menuDefsCount = reader.ReadInt16();
+    PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING(
+        "CPbk2UIExtensionInformation::ConstructL, num of menu defs:%d"), 
+            menuDefsCount );            
+    for ( TInt i = 0; i < menuDefsCount; ++i )
+        {
+        CPbk2UIExtensionMenu* menu = CPbk2UIExtensionMenu::NewLC( reader );
+        iMenus.AppendL( menu );
+        CleanupStack::Pop( menu );
+        }
+
+    // Extension view ids
+    const TInt extensionViewIdsCount = reader.ReadInt16();
+    PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING(
+        "CPbk2UIExtensionInformation::ConstructL, num of view ids:%d"), 
+            extensionViewIdsCount );
+    for ( TInt i = 0; i < extensionViewIdsCount; ++i )
+        {
+        TPbk2UIExtensionViewId viewId( reader );
+        iViewIds.AppendL( viewId );
+        }
+
+    // Extension's view graph resource id
+    iViewGraphModificationResId = reader.ReadInt32();
+    PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING(
+        "CPbk2UIExtensionInformation::ConstructL, view graph res id:%d"), 
+            iViewGraphModificationResId );
+
+    // Extension icons
+    iIconInformation = CPbk2UIExtensionIconInformation::NewL( 
+            reader.ReadInt32() );
+
+    // Store property array
+    iStorePropertyArrayResId = reader.ReadInt32();
+    PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING(
+        "CPbk2UIExtensionInformation::ConstructL, store property res id:%d"), 
+            iStorePropertyArrayResId );
+
+    CleanupStack::PopAndDestroy(); // reader
+    
+    PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING(
+        "CPbk2UIExtensionInformation::ConstructL(0x%x) END"), this );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::MenuCount
+// --------------------------------------------------------------------------
+//
+TInt CPbk2UIExtensionInformation::MenuCount() const
+    {
+    return iMenus.Count();
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::MenuAt
+// --------------------------------------------------------------------------
+//
+CPbk2UIExtensionMenu& CPbk2UIExtensionInformation::MenuAt( 
+        TInt aIndex)
+    {
+    return *iMenus[aIndex];
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::AddMenuL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2UIExtensionInformation::AddMenuL(
+        CPbk2UIExtensionMenu* aExtensionMenu )
+    {
+    if (aExtensionMenu)
+        {
+        iMenus.AppendL( aExtensionMenu );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::ImplementationUid
+// --------------------------------------------------------------------------
+//
+TUid CPbk2UIExtensionInformation::ImplementationUid() const
+    {
+    return iImplementationUid;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::LoadingPolicy
+// --------------------------------------------------------------------------
+//
+TUint CPbk2UIExtensionInformation::LoadingPolicy() const
+    {
+    return iLoadingPolicy;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::ImplementsMenuCommand
+// --------------------------------------------------------------------------
+//
+TBool CPbk2UIExtensionInformation::ImplementsMenuCommand( TInt aCommandId )
+    {
+    return ( iMenuCommandRange.IsIdIncluded( aCommandId ) ||
+        iOverWrittenCmds.Find( aCommandId ) != KErrNotFound );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::ImplementsView
+// --------------------------------------------------------------------------
+//
+TBool CPbk2UIExtensionInformation::ImplementsView( TUid aViewId )
+    {
+    TBool result = EFalse;
+    const TInt count = iViewIds.Count();
+    for ( TInt i = 0; i < count; ++i )
+        {
+        if ( iViewIds[i].ViewId() == aViewId )
+            {
+            result = ETrue;
+            break;
+            }
+        }
+    return result;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::HasViewGraphModifications
+// --------------------------------------------------------------------------
+//
+TBool CPbk2UIExtensionInformation::HasViewGraphModifications() const
+    {
+    return ( iViewGraphModificationResId != 0 );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::CreateViewGraphModificationReaderLC
+// --------------------------------------------------------------------------
+//
+void CPbk2UIExtensionInformation::CreateViewGraphModificationReaderLC
+        ( TResourceReader& aReader ) const
+    {
+    if ( HasViewGraphModifications() )
+        {
+        CCoeEnv::Static()->CreateResourceReaderLC
+            ( aReader, iViewGraphModificationResId );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::ViewIds
+// --------------------------------------------------------------------------
+//
+TArray<TPbk2UIExtensionViewId> CPbk2UIExtensionInformation::ViewIds() const
+    {
+    return iViewIds.Array();
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::AddViewIdL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2UIExtensionInformation::AddViewIdL(
+        TPbk2UIExtensionViewId& aViewId)
+    {
+    iViewIds.AppendL( aViewId );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::HasIconExtension
+// --------------------------------------------------------------------------
+//
+TBool CPbk2UIExtensionInformation::HasIconExtension() const
+    {
+    return iIconInformation->IconInfoArrayResourceId() != 0;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::IconInformation
+// --------------------------------------------------------------------------
+//
+CPbk2UIExtensionIconInformation&
+    CPbk2UIExtensionInformation::IconInformation() const
+    {
+    __ASSERT_DEBUG( HasIconExtension(), Panic( EPreCond_IconInformation ) );
+    return *iIconInformation;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::HasStorePropertyArray
+// --------------------------------------------------------------------------
+//
+TBool CPbk2UIExtensionInformation::HasStorePropertyArray() const
+    {
+    return ( iStorePropertyArrayResId != 0 );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2UIExtensionInformation::CreateStorePropertyArrayReaderLC
+// --------------------------------------------------------------------------
+//
+void CPbk2UIExtensionInformation::CreateStorePropertyArrayReaderLC
+        ( TResourceReader& aReader )
+    {
+     CCoeEnv::Static()->CreateResourceReaderLC
+        ( aReader, iStorePropertyArrayResId );
+    }
+
+// End of File