phonebookui/Phonebook2/xSPExtensionManager/src/CxSPViewManager.cpp
changeset 0 e686773b3f54
child 21 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/xSPExtensionManager/src/CxSPViewManager.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2006 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: 
+*       Composite view extension.
+*
+*/
+
+
+// INCLUDE FILES
+#include <Pbk2Commands.rsg>
+#include <coemain.h>
+#include <barsread.h>
+#include <eikmenup.h>
+#include "CxSPViewManager.h"
+#include "ForEachUtil.h"
+#include "MxSPView.h"
+#include "CxSPCommandInfo.h"
+#include "ExtensionManager.hrh"
+
+// CONSTANTS
+const TInt KExtensionGranularity = 1;
+
+// ==================== MEMBER FUNCTIONS ====================
+CxSPViewManager::CxSPViewManager() :
+    iViews(KExtensionGranularity),
+    iNewCommands( EExtensionManagerFirstFreeCommand )
+    {
+    }
+
+CxSPViewManager::~CxSPViewManager()
+    {
+    const TInt count = iViews.Count();
+    for (TInt i=0; i<count; ++i)
+        {
+        Release( iViews[i] );
+        }
+    iViews.Reset();
+    iCommandIdMap.ResetAndDestroy();
+    iCommandIdMap.Close();
+    }
+
+CxSPViewManager* CxSPViewManager::NewL()
+    {
+    CxSPViewManager* self = new (ELeave) CxSPViewManager;
+    return self;
+    }
+
+void CxSPViewManager::AppendL( MxSPView* aView, TUint32 aId )
+    { 
+    iViews.AppendL( aView );   
+	TInt res = aView->CommandInfoResource();
+	if( res != KErrNotFound )
+		{
+		TResourceReader reader;
+		CCoeEnv::Static()->CreateResourceReaderLC( reader, res );
+		TInt resCount = reader.ReadInt16();
+		for( TInt j = 0; j < resCount; j++ )
+			{
+			CxSPCommandInfo* commandInfo = NULL;
+			commandInfo = CxSPCommandInfo::NewLC( reader,
+												aId,
+												iNewCommands );
+			User::LeaveIfError( iCommandIdMap.Append( commandInfo ) );
+			CleanupStack::Pop(); // commandInfo
+			}
+		CleanupStack::PopAndDestroy(); // reader						
+		aView->RegisterCommandMapper( *this );
+		}	            	    	
+    }
+
+void CxSPViewManager::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
+    {
+    if( aResourceId == R_PHONEBOOK2_NAMESLIST_MAIN_MENU )
+    	{
+    	ForEachL(iViews,
+             VoidMemberFunction(&MxSPView::DynInitNamesListMainMenuPaneL),
+             aResourceId,
+             aMenuPane);
+    	}
+        
+    ForEachL(iViews,
+             VoidMemberFunction(&MxSPView::DynInitMenuPaneL),
+             aResourceId,
+             aMenuPane);
+    }
+  
+        
+TBool CxSPViewManager::HandleCommandL(TInt aCommandId, MPbk2ContactUiControl* aUiControl)
+    {    
+    typedef TBool (MxSPView::* HandleCommandPtr)
+        (TInt,MPbk2ContactUiControl*);    
+    HandleCommandPtr handleFunc = &MxSPView::HandleCommandL;
+    return TryEachL(iViews,
+                    MemberFunction(handleFunc),
+                    aCommandId,
+                    aUiControl);        
+    }
+    
+TInt CxSPViewManager::GetOldCommand( TUint32 aId, TInt aNewCommand,
+        							TInt& aOldCommand ) const
+	{
+	TInt mapCount = iCommandIdMap.Count();
+	TInt err( KErrNotFound );
+	for( TInt i = 0; i < mapCount && err; i++ )
+		{
+		CxSPCommandInfo* info = iCommandIdMap[i];
+		if( info->Id() == aId && info->NewCommandId() == aNewCommand )
+			{
+			aOldCommand = info->OldCommandId();
+			err = KErrNone;
+			}
+		}	
+	return err;
+	}
+	
+TInt CxSPViewManager::GetNewCommand( TUint32 aId, TInt aOldCommand,
+        							TInt& aNewCommand ) const
+	{
+	TInt mapCount = iCommandIdMap.Count();
+	TInt err( KErrNotFound );
+	for( TInt i = 0; i < mapCount && err; i++ )
+		{
+		CxSPCommandInfo* info = iCommandIdMap[i];
+		if( info->Id() == aId && info->OldCommandId() == aOldCommand )
+			{
+			aNewCommand = info->NewCommandId();
+			err = KErrNone;
+			}
+		}	
+	return err;	
+	}
+
+
+//  End of File