phonebookui/Phonebook2/UIControls/src/CPbk2ListboxModelCmdDecorator.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/UIControls/src/CPbk2ListboxModelCmdDecorator.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,161 @@
+/*
+* 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:  Listbox model decorator that adds commands to the list.
+*
+*/
+
+
+// INCLUDES
+#include "CPbk2ListboxModelCmdDecorator.h"
+
+#include <CPbk2IconArray.h>
+#include <Pbk2UID.h>
+#include <Pbk2Commands.hrh>
+#include <Pbk2IconId.hrh>
+
+// LOCAL CONSTANTS AND MACROS
+const TText KSeparator = '\t';
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+CPbk2ListboxModelCmdDecorator* CPbk2ListboxModelCmdDecorator::NewL(
+    const CPbk2IconArray& aIconArray,
+    TPbk2IconId aEmptyIconId,
+    TPbk2IconId aDefaultIconId )
+    {
+    CPbk2ListboxModelCmdDecorator* self = new (ELeave) CPbk2ListboxModelCmdDecorator(
+	    aIconArray,
+	    aEmptyIconId,
+	    aDefaultIconId );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+CPbk2ListboxModelCmdDecorator::~CPbk2ListboxModelCmdDecorator()
+    {
+    }
+
+TInt CPbk2ListboxModelCmdDecorator::MdcaCount() const
+    {
+    TInt count = 0; // No list items
+    if ( iDecoratedModel )
+    	{
+    	count = iDecoratedModel->MdcaCount() + NumberOfEnabledCommands();
+    	}
+    return count;
+    }
+
+TPtrC CPbk2ListboxModelCmdDecorator::MdcaPoint( TInt aIndex ) const
+    {
+    TPtrC result;
+    const TInt enabledCommandCount = NumberOfEnabledCommands();
+    if ( aIndex < enabledCommandCount )
+    	{
+    	// It is a command that is to be shown.
+    	
+    	// Need to create a listbox compatible string.
+        TInt iconIndex = iIconArray.FindIcon(iEmptyIconId);
+        if (iconIndex < 0)
+            {
+            iconIndex = iIconArray.FindIcon(iDefaultIconId);
+            }
+
+        if(EnabledCommand( aIndex ).CommandId() == EPbk2CmdRcl )
+            {
+            iconIndex = iIconArray.FindIcon(TPbk2IconId(
+                TUid::Uid(KPbk2UID3), EPbk2qgn_prop_group_small )); //TODO: use correct icon
+            }
+        
+        iBuffer.Num(iconIndex);
+        iBuffer.Append(KSeparator);
+        iBuffer.Append( EnabledCommand( aIndex ).NameForUi() );
+    	result.Set( iBuffer );
+    	}
+    else
+    	{
+    	// It is a contact that is to be shown.
+    	result.Set(
+    		iDecoratedModel->MdcaPoint( aIndex - enabledCommandCount) );
+    	}
+    return result;
+    }
+
+void CPbk2ListboxModelCmdDecorator::SetDecoratedModel( const MDesCArray& aModel )
+    {
+    iDecoratedModel = &aModel;
+    }
+
+void CPbk2ListboxModelCmdDecorator::SetListCommands(
+	const RPointerArray<MPbk2UiControlCmdItem>* aCommands )
+	{
+	iCommands = aCommands;
+	}
+
+TInt CPbk2ListboxModelCmdDecorator::NumberOfEnabledCommands() const
+	{
+	TInt enabledCommandCount = 0;
+	if ( iCommands )
+		{
+		for ( TInt n = 0; n < iCommands->Count(); ++n )
+			{
+			const MPbk2UiControlCmdItem& cmd = *(*iCommands)[n];
+			if ( cmd.IsEnabled() )
+				{
+				enabledCommandCount++;
+				}
+			}
+		}
+	return enabledCommandCount;
+	}
+
+MPbk2UiControlCmdItem& CPbk2ListboxModelCmdDecorator::EnabledCommand( TInt aIndex ) const
+	{
+	TInt enabledCount = 0;
+	TInt indexOfResult = KErrNotFound;
+	for ( TInt n = 0; n < iCommands->Count()&& indexOfResult == KErrNotFound; ++n )
+		{
+		if ( (*iCommands)[ n ]->IsEnabled() )
+			{
+			enabledCount++;
+			if ( enabledCount-1 == aIndex )
+				{
+				indexOfResult = n;
+				}
+			}
+		}
+	return *(*iCommands)[ indexOfResult ];
+	}
+
+
+CPbk2ListboxModelCmdDecorator::CPbk2ListboxModelCmdDecorator(
+	const CPbk2IconArray& aIconArray,
+	TPbk2IconId aEmptyIconId,
+	TPbk2IconId aDefaultIconId ) :
+	iIconArray( aIconArray ),
+	iEmptyIconId( aEmptyIconId ),
+	iDefaultIconId( aDefaultIconId ),
+	iBuffer( iFormattingBuffer )
+    {
+    }
+
+void CPbk2ListboxModelCmdDecorator::ConstructL()
+    {
+    }
+
+// end of file