--- /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