diff -r 000000000000 -r 5e5d6b214f4f uiservicetab/vimpstui/src/cvimpstuidoublelistboxarray.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpstui/src/cvimpstuidoublelistboxarray.cpp Tue Feb 02 10:12:18 2010 +0200 @@ -0,0 +1,331 @@ +/* +* Copyright (c) 2008 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: CVIMPSTUiDoubleListboxArray-array decorator +* +*/ + + +// INCLUDE FILES +#include "cvimpstuidoublelistboxarray.h" +#include "tvimpstconsts.h" +#include "vimpstutils.h" +#include "mvimpstprocessarray.h" +#include "cvimpstuidoublelistboxtabviewcontrol.h" // tab control +#include +#include "tvimpstenums.h" +#include "vimpstdebugprint.h" +// platform includes + +#include +#include +#include +#include +#include +#include + +#include + +const TInt KAvtarLength = 3; + _LIT( KAvatarString , "%d\t" ); +// ================= MEMBER FUNCTIONS ======================= + +// Two-phased constructor. +CVIMPSTUiDoubleListboxArray* CVIMPSTUiDoubleListboxArray::NewL(MVIMPSTProcessArray& aItemModel, + CFormattedCellListBoxData* aListboxData, + CVIMPSTUiDoubleStyleListBox& aListBox, + CVIMPSTUiDoubleListBoxTabViewControl& aTabbedviewControl + ) + { + CVIMPSTUiDoubleListboxArray* self = new (ELeave) CVIMPSTUiDoubleListboxArray( aItemModel, + aListboxData, aListBox,aTabbedviewControl); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// Destructor +CVIMPSTUiDoubleListboxArray::~CVIMPSTUiDoubleListboxArray() + { + delete iData; + } + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CVIMPSTUiDoubleListboxArray::CVIMPSTUiDoubleListboxArray( MVIMPSTProcessArray& aItemModel, + CFormattedCellListBoxData* aListboxData, CVIMPSTUiDoubleStyleListBox& aListBox /*= NULL*/, + CVIMPSTUiDoubleListBoxTabViewControl& aTabbedviewControl) + : + iItemArray(aItemModel), + iListboxData( aListboxData ), + iListBox(aListBox), + iTabbedviewControl(aTabbedviewControl) + { + } + +// Symbian OS default constructor can leave. +void CVIMPSTUiDoubleListboxArray::ConstructL() + { + + // maximum length of icons appended to identification + // There can be four icons (A+B and two on D-column) + iMaxLengthOfIcons = + KDefaultAvatar().Length()+ // longest A-Column icon + (KTab().Length() * 2)+ // length of tabs between items + KContactOnlineIconA().Length(); // longest D-Column icon + + // Reserve enough memory to handle maximum size item + iData = HBufC::NewL( KFriendsListMaxIdentificationLength + + KStatusMsgMaxLength + + iMaxLengthOfIcons ); + + iPresenceSupported = iItemArray.IsSubServiceSupportedL(TVIMPSTEnums::EPresence); + iIMSupported = iItemArray.IsSubServiceSupportedL(TVIMPSTEnums::EIM ); + } + + +// --------------------------------------------------------- +// CVIMPSTUiDoubleListboxArray::MdcaCount +// Returns the number of descriptor elements in a descriptor array. +// (other items were commented in a header). +// --------------------------------------------------------- +// +TInt CVIMPSTUiDoubleListboxArray::MdcaCount() const + { + return iItemArray.Count(); + } + +// --------------------------------------------------------- +// CVIMPSTUiDoubleListboxArray::MdcaCount +// Return pointer to descriptor data in given index of an array +// (other items were commented in a header). +// --------------------------------------------------------- +// +TPtrC16 CVIMPSTUiDoubleListboxArray::MdcaPoint( TInt aIndex ) const + { + CHAT_DP( D_CHAT_LIT("CVIMPSTUiArray::MdcaPoint: aIndex: %d"), aIndex ); + // Although this is a const method, we do change the member data. + // This is done because of performance + // -> no need to create new buffer every time. + TPtr dataPtr( iData->Des() ); + dataPtr.Zero(); + + + // fetch the item and process correct type + TVIMPSTEnums::TItem type = iItemArray.GetType(aIndex); + CHAT_DP( D_CHAT_LIT(" -> item type: %d"), type ); + + switch( type ) + { + case TVIMPSTEnums::EOwnStatusItem: + { + CHAT_DP( D_CHAT_LIT(" -> own data") ); + TRAP_IGNORE( AppendOwnDataL(dataPtr,aIndex ) ); + break; + } + case TVIMPSTEnums::EContactItem: + case TVIMPSTEnums::EUnknonContactItem: + case TVIMPSTEnums::EFriendRequestItem: + { + return iItemArray.GetFormattedString(aIndex); + } + default: + { + // shouldn't be here + CHAT_DP( D_CHAT_LIT(" -> default") ); + break; + } + } //end outer switch + + CHAT_DP( D_CHAT_LIT("CVIMPSTUiArray::MdcaPoint out") ); + return dataPtr; + } + + + +// --------------------------------------------------------- +// CVIMPSTUiDoubleListboxArray::AppendContact +// Append formatted contact identification to buffer +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CVIMPSTUiDoubleListboxArray::AppendOwnDataL( TPtr& aBuffer, + TInt aIndex + ) const + { + CHAT_DP( D_CHAT_LIT("CVIMPSTUiArray::AppendOwnDataL" ) ); + TVIMPSTEnums::TVIMPSTRegistrationState loginstate = iItemArray.GetLoginState(); + CHAT_DP( D_CHAT_LIT("CVIMPSTUiArray::AppendOwnDataL, login state: %d" ), loginstate ); + TInt avtarIndex = iItemArray.OwnAvatarIndexL(); + + if( avtarIndex ) + { + TBuf buf; + buf.Format( KAvatarString, avtarIndex); + aBuffer.Append( buf); + } + else + { + // append default avatar for column A + aBuffer.Append( KDefaultAvatar ); + } + // B-column append dispplay id + + + // append only max length of the user id allowed : extra check + + TPtrC identification(VIMPSTUtils::DisplayId(iItemArray.GetItemUserId(aIndex))); + aBuffer.Append( identification.Left( KFriendsListMaxIdentificationLength ) ); + + + + // append \t before second line text + aBuffer.Append( KTab ); + + // append status text for second line and Icon for column D based on conditions + if ( TVIMPSTEnums::ESVCERegistered == loginstate ) + { + TVIMPSTEnums::TOnlineStatus status = iItemArray.GetOnlineStatusL(aIndex); + CHAT_DP( D_CHAT_LIT("CVIMPSTUiArray::AppendOwnDataL, status: %d" ), status ); + TPtrC statusText = iItemArray.StatusTextL( aIndex ); + if( statusText.Length() > 0) // if status text show it + { + // append only KStatusMsgMaxLenght of status masg + aBuffer.Append( statusText.Left( KStatusMsgMaxLength ) ); + } + else + { // show default if no status text based on status + switch(status) // no need to handle the serviceout case as its not applicable here in case of own data + { + case TVIMPSTEnums::EOnline: + { + HBufC* onlineText = StringLoader::LoadLC( R_QTN_SERVTAB_DEFAULT_STATUSTEXT_ONLINE ); + aBuffer.Append( onlineText->Des()); + CleanupStack::PopAndDestroy(); //onlineText + break; + } + case TVIMPSTEnums::EBusy: + { + HBufC* busyText = StringLoader::LoadLC( R_SERVDETAIL_STATUSTEXT_BUSY ) ; + aBuffer.Append( busyText->Des()); + CleanupStack::PopAndDestroy(); //busyText + break; + } + case TVIMPSTEnums::EAway: + { + HBufC* awayText = StringLoader::LoadLC( R_QTN_SERVTAB_DEFAULT_STATUSTEXT_AWAY ); + aBuffer.Append( awayText->Des()); + CleanupStack::PopAndDestroy(); //awayText + break; + } + case TVIMPSTEnums::EOnPhone: + { + HBufC* onphoneText = StringLoader::LoadLC( R_SERVDETAIL_STATUSTEXT_ONTHEPHONE ); + aBuffer.Append( onphoneText->Des()); + CleanupStack::PopAndDestroy(); //onphone text + break; + } + case TVIMPSTEnums::EDoNotDisturb: + { + HBufC* dndText = StringLoader::LoadLC( R_SERVDETAIL_STATUSTEXT_DND ); + aBuffer.Append( dndText->Des()); + CleanupStack::PopAndDestroy(); //dnd Text + break; + } + case TVIMPSTEnums::EInvisible: + { + HBufC* invisibleText = StringLoader::LoadLC( R_QTN_SERVTAB_DEFAULT_STATUSTEXT_INVISIBLE ); + aBuffer.Append( invisibleText->Des()); + CleanupStack::PopAndDestroy(); //invisible text + break; + } + case TVIMPSTEnums::EOffline: + default: + { + HBufC* offlineText = StringLoader::LoadLC( R_QTN_SERVTAB_DEFAULT_STATUSTEXT_OFFLINE ); + aBuffer.Append( offlineText->Des()); + CleanupStack::PopAndDestroy(); //offlineText + break; + } + }// end case for status text + } + // append tab before appending icon + aBuffer.Append( KTab ); + + CHAT_DP( D_CHAT_LIT("CVIMPSTUiArray::AppendOwnDataL, handle status enum: %d" ), status ); + switch(status) + { + case TVIMPSTEnums::EOnline: + { + aBuffer.Append( KContactOnlineIconA ); + break; + } + case TVIMPSTEnums::EInvisible: + { + aBuffer.Append( KListInvisibleIcon ); + break; + } + case TVIMPSTEnums::EBusy: + case TVIMPSTEnums::EDoNotDisturb: + { + aBuffer.Append( KListBusyIcon ); + break; + } + case TVIMPSTEnums::EAway: + { + aBuffer.Append( KListAwayIcon ); + break; + } + case TVIMPSTEnums::EOnPhone: + { + aBuffer.Append( KFrndOnMobileIcon ); + break; + } + case TVIMPSTEnums::EOffline: //Flowthrough + { + aBuffer.Append( KContactOfflineIconA ); + break; + } + case TVIMPSTEnums::EBlocked: + case TVIMPSTEnums::EPending: + default: + { + aBuffer.Append( KEmptyIconA ); + break; + } + }//end switch + + } + else + { + // except in disconnecting state show username + if(TVIMPSTEnums::ESVCENetworkDisConnecting != loginstate ) + { + CHAT_DP( D_CHAT_LIT("CVIMPSTUiArray::AppendOwnDataL, offline state" ) ); + TPtrC userId = iItemArray.LoginUserIdFromStoreL(); + aBuffer.Append( VIMPSTUtils::DisplayId( userId )); + } + aBuffer.Append( KTab ); // append tab + aBuffer.Append( KEmptyIconC ); // no icon + } + +} + + + + + +// End of File