uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewlistboxmodel.cpp
branchRCL_3
changeset 23 9a48e301e94b
parent 0 5e5d6b214f4f
--- /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 <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