--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewlistboxmodel.cpp Tue Feb 02 10:12:18 2010 +0200
@@ -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 <vimpstdetailsviewpluginrsc.rsg>
+// virtual phonebook
+#include <MVPbkFieldType.h>
+#include <MVPbkStoreContact.h>
+#include <MVPbkContactStore.h>
+#include <MVPbkContactStoreProperties.h>
+// system includes
+#include <aknlists.h>
+#include <avkon.rsg>
+#include <VPbkEng.rsg>
+#include <AknIconArray.h>
+#include <barsc.h>
+#include <barsread.h>
+#include <StringLoader.h>
+
+// ======== 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<KBufferSize> 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<TInt>(EVIMPSTServiceIconOn);
+ break;
+ }
+ case TVIMPSTEnums::EInvisible:
+ {
+ iconId = static_cast<TInt>(EVIMPSTServiceIconInvi);
+ break;
+ }
+ case TVIMPSTEnums::EAway:
+ {
+ iconId = static_cast<TInt>(EVIMPSTServiceIconAway);
+ break;
+ }
+ case TVIMPSTEnums::EBusy:
+ case TVIMPSTEnums::EDoNotDisturb:
+ {
+ iconId = static_cast<TInt>(EVIMPSTServiceIconBusy);
+ break;
+ }
+ case TVIMPSTEnums::EOnPhone:
+ {
+ iconId = static_cast<TInt>(EVIMPSTServiceIconOnMobile);
+ break;
+ }
+ case TVIMPSTEnums::EOffline:
+ {
+ iconId = static_cast<TInt>(EVIMPSTServiceIconOff);
+ break;
+ }
+ case TVIMPSTEnums::ECallForward:
+ {
+ iconId = static_cast<TInt>(EVIMPSTServiceIconCallForward);
+ break;
+ }
+ case TVIMPSTEnums::EPending:
+ case TVIMPSTEnums::EBlocked:
+ case TVIMPSTEnums::EUnknown:
+ case TVIMPSTEnums::EServiceOut:
+ default:
+ {
+ iconId = static_cast<TInt>(EVIMPSTServiceIconEmpty);
+ break;
+ }
+ }
+ field.SetFieldTextL( iPresenceHandler.GetStatusMessageL() ) ;
+ }
+
+ if( iconId == static_cast<TInt>(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