diff -r 3104fc151679 -r 9a48e301e94b uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewlistboxmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewlistboxmodel.cpp Wed Sep 01 12:33:36 2010 +0100 @@ -0,0 +1,348 @@ +/* +* 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: Implementation of detailsview plugin control data model + * +*/ + + +#include "cvimpstdetailsviewlistboxmodel.h" + +#include "cvimpstfieldproperty.h" +#include "cvimpstfieldpropertyarray.h" +#include "vimpstdetailsview.hrh" +#include "tvimpstenums.h" +#include +// virtual phonebook +#include +#include +#include +#include +// system includes +#include +#include +#include +#include +#include +#include +#include + +// ======== LOCAL FUNCTIONS ======== + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewListBoxModel::NewL +// --------------------------------------------------------------------------- +// +CVIMPSTDetailsViewListBoxModel* CVIMPSTDetailsViewListBoxModel::NewL( + CEikListBox& aListBox, + MVIMPSTDetailsPresenceHandler& aPresenceHandler, + HBufC8* aFieldBuffer) + { + CVIMPSTDetailsViewListBoxModel* self = + new(ELeave) CVIMPSTDetailsViewListBoxModel(aListBox, aPresenceHandler, + aFieldBuffer ); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + + return self; + } + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewListBoxModel::~CVIMPSTDetailsViewListBoxModel +// --------------------------------------------------------------------------- +// +CVIMPSTDetailsViewListBoxModel::~CVIMPSTDetailsViewListBoxModel() + { + delete iFieldArray; + delete iTextCache; + delete iFieldBuffer; + } + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewListBoxModel::CVIMPSTDetailsViewListBoxModel +// --------------------------------------------------------------------------- +// +CVIMPSTDetailsViewListBoxModel::CVIMPSTDetailsViewListBoxModel( + CEikListBox& aListBox, + MVIMPSTDetailsPresenceHandler& aPresenceHandler, + HBufC8* aFieldBuffer ) + : iListBox(aListBox), + iPresenceHandler( aPresenceHandler ) + { + // owns + iFieldBuffer = aFieldBuffer ; + } + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewListBoxModel::ConstructL +// --------------------------------------------------------------------------- +// +void CVIMPSTDetailsViewListBoxModel::ConstructL() + { + iTextCache = new(ELeave) CDesCArrayFlat(KCacheGranularity); + } + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewListBoxModel:: +// --------------------------------------------------------------------------- +// +TInt CVIMPSTDetailsViewListBoxModel::FocusedFieldIndex() + { + return iListBox.CurrentItemIndex(); + } + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewListBoxModel:: +// --------------------------------------------------------------------------- +// +void CVIMPSTDetailsViewListBoxModel::SetFocusedListIndex(TInt aIndex) + { + if( !iFieldArray ) + { + return; + } + TInt count = iFieldArray->Count(); + if ( aIndex < 0 || aIndex >= count ) + { + aIndex = 0; + } + if( count ) + { + iListBox.SetCurrentItemIndexAndDraw(aIndex); + } + } + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewListBoxModel:: +// --------------------------------------------------------------------------- +// + CVIMPSTFieldProperty& CVIMPSTDetailsViewListBoxModel::FocusField() + { + return ( iFieldArray->At( FocusedFieldIndex() ) ); + } + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewListBoxModel::FieldsArray +// --------------------------------------------------------------------------- +// + CVIMPSTFieldPropertyArray& CVIMPSTDetailsViewListBoxModel::FieldsArray() + { + return *iFieldArray; + } + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewListBoxModel::FieldsCount +// --------------------------------------------------------------------------- +// +TInt CVIMPSTDetailsViewListBoxModel::FieldsCount() + { + if( !iFieldArray ) + { + return 0; + } + return iFieldArray->Count(); + } +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewListBoxModel::CreateListPresentationL +// --------------------------------------------------------------------------- +// +void CVIMPSTDetailsViewListBoxModel::CreateListPresentationL( MVPbkStoreContact& aContact, + TInt aFocusFieldIndex,TDesC& aServiceName, TStoreType aStoreType ) + { + const MVPbkContactStoreProperties& storeProperties = aContact.ParentStore().StoreProperties(); + const MVPbkFieldTypeList& supportedFieldTypes = storeProperties.SupportedFields(); + + if( iFieldBuffer ) + { + TResourceReader reader; + HBufC8* buf = iFieldBuffer->AllocL(); + CleanupStack::PushL( buf ); + reader.SetBuffer( buf ); + iFieldArray = CVIMPSTFieldPropertyArray::NewL( supportedFieldTypes, + aContact, + reader , + iPresenceHandler.IsSupported(), + aServiceName, + aStoreType); + CleanupStack::PopAndDestroy( buf ); + } + + AddFieldsDataL(); + if( iTextCache->Count() ) + { + CVIMPSTFieldProperty* field = iFieldArray->GetFieldById( EVIMPSTFieldIdImpp ); + if( field ) + { + iPresenceHandler.SubscribePresenceL( field->FieldDataL() ); + } + SetFocusedListIndex( aFocusFieldIndex ); + } + } + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewListBoxModel::SetEmptyTextsToListboxL() +// See header for details. +// --------------------------------------------------------------------------- +// +void CVIMPSTDetailsViewListBoxModel::SetEmptyTextsToListboxL() + { + // update the empty string now to avoid flickering + HBufC* string = StringLoader::LoadLC( R_SERVDETAIL_BACKGROUNDTEXT_HEADER ); + if( string ) + { + iListBox.View()->SetListEmptyTextL( *string ); + CleanupStack::PopAndDestroy( string ); + iListBox.DrawNow(); + } + } + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewListBoxModel::MdcaCount +// --------------------------------------------------------------------------- +// +TInt CVIMPSTDetailsViewListBoxModel::MdcaCount() const + { + return iTextCache->Count(); + } + +// --------------------------------------------------------------------------- +// CVIMPSTDetailsViewListBoxModel::MdcaPoint +// --------------------------------------------------------------------------- +// +TPtrC CVIMPSTDetailsViewListBoxModel::MdcaPoint(TInt aIndex) const + { + return iTextCache->MdcaPoint(aIndex); + } + +// -------------------------------------------------------------------------- +// CVIMPSTDetailsViewListBoxModel::AddFieldsDataL +// -------------------------------------------------------------------------- +// +void CVIMPSTDetailsViewListBoxModel::AddFieldsDataL( ) + { + iTextCache->Reset(); + + TInt fieldCount = iFieldArray->Count(); + + for (TInt i = 0; i < fieldCount; i++) + { + TBuf buffer; + buffer.Zero(); + + CVIMPSTFieldProperty& field = iFieldArray->At(i); + TInt iconId = field.IconId(); + if( field.FieldId() == EVIMPSTFieldIdStatusMsg ) + { + TVIMPSTEnums::TOnlineStatus status = iPresenceHandler.GetPresenceStatus(); + switch( status ) + { + case TVIMPSTEnums::EOnline: + { + iconId = static_cast(EVIMPSTServiceIconOn); + break; + } + case TVIMPSTEnums::EInvisible: + { + iconId = static_cast(EVIMPSTServiceIconInvi); + break; + } + case TVIMPSTEnums::EAway: + { + iconId = static_cast(EVIMPSTServiceIconAway); + break; + } + case TVIMPSTEnums::EBusy: + case TVIMPSTEnums::EDoNotDisturb: + { + iconId = static_cast(EVIMPSTServiceIconBusy); + break; + } + case TVIMPSTEnums::EOnPhone: + { + iconId = static_cast(EVIMPSTServiceIconOnMobile); + break; + } + case TVIMPSTEnums::EOffline: + { + iconId = static_cast(EVIMPSTServiceIconOff); + break; + } + case TVIMPSTEnums::ECallForward: + { + iconId = static_cast(EVIMPSTServiceIconCallForward); + break; + } + case TVIMPSTEnums::EPending: + case TVIMPSTEnums::EBlocked: + case TVIMPSTEnums::EUnknown: + case TVIMPSTEnums::EServiceOut: + default: + { + iconId = static_cast(EVIMPSTServiceIconEmpty); + break; + } + } + field.SetFieldTextL( iPresenceHandler.GetStatusMessageL() ) ; + } + + if( iconId == static_cast(EVIMPSTServiceIconEmpty ) ) + { + buffer.Append(KTabLit); //0 + } + else + { + buffer.AppendNum(iconId); //0 + buffer.Append(KTabLit); + } + + TPtrC labelPtr = field.DefaultLabelL(); + buffer.Append( labelPtr ); + buffer.Append(KTabLit); + TPtrC fieldText = field.FieldDataL(); + buffer.Append( fieldText ); + iTextCache->AppendL(buffer); + buffer.Zero(); + } + iListBox.HandleItemAdditionL(); + } + +// ----------------------------------------------------------------------------- +// CVIMPSTDetailsViewListBoxModel::DisplayId +// ----------------------------------------------------------------------------- +// +TPtrC CVIMPSTDetailsViewListBoxModel::DisplayId( const TDesC& aId, TBool aListHiding ) + { + TPtrC ret( aId ); + // locate ":" for userid, groupid. + // locate "/" for list id. + TInt pos = aId.FindC( aListHiding ? KSlash : KColon ); + + if ( ( pos != KErrNotFound) && ( pos != aId.Length()-1) ) + { + // contains the special character, and it is not the last char + // remove everything before the special char (including the char) + ret.Set( aId.Mid( pos + 1 ) ); + } + // remove also the domain part + TInt domainPos = ret.FindC( KAt ); + if ( ( domainPos != KErrNotFound ) && ( domainPos != 0 ) ) + { + ret.Set( ret.Mid( 0, domainPos ) ); + } + return ret; + } + +// End of File