phonebookengines/contactsmodel/inc/cntview.h
changeset 0 e686773b3f54
child 24 0ba2181d7c28
equal deleted inserted replaced
-1:000000000000 0:e686773b3f54
       
     1 // Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #ifndef __CNTVIEW_H__
       
    17 #define __CNTVIEW_H__
       
    18 
       
    19 #include <cntviewbase.h>
       
    20 
       
    21 /** The maximum length of the string used by contact sub view ranges to find the 
       
    22 item at the upper or lower limit of the range.
       
    23 
       
    24 In practice, only the first character in the string is used and this value 
       
    25 is ignored. 
       
    26 @publishedAll
       
    27 @released
       
    28 */
       
    29 const TInt KMaxBoundaryMatchLength=8;
       
    30 
       
    31 class CContactGroupView: public CContactViewBase, public MContactViewObserver
       
    32 /** Provides a view of a group of contact items.
       
    33 
       
    34 The view uses an underlying view. For items to appear in the group view, they 
       
    35 must exist in the underlying view.
       
    36 
       
    37 The TGroupType enumeration defines whether the view displays items that belong 
       
    38 to the group, items that do not belong to the group, or items that do not 
       
    39 belong to any group.
       
    40 
       
    41 The group view observes its underlying view so that it is kept up to date 
       
    42 if the contents of the underlying view change.
       
    43 
       
    44 The group can be identified by a contact item ID or by a label, e.g. "family", 
       
    45 or "colleagues".
       
    46 
       
    47 @see CContactGroup 
       
    48 @publishedAll
       
    49 @released
       
    50 */
       
    51 	{
       
    52 friend class CGroupViewTester;
       
    53 public:
       
    54 	/** Defines the types of contact group view. */
       
    55 	enum TGroupType
       
    56 		{
       
    57 		/** The view contains contact items in the group. */
       
    58 		EShowContactsInGroup,
       
    59 		/** The view contains contact items not in the group. */
       
    60 		EShowContactsNotInGroup,
       
    61 		/** The view contains contact items not in any group. */
       
    62 		EShowContactsNotInAnyGroup
       
    63 		};
       
    64 public:
       
    65 	IMPORT_C static CContactGroupView* NewL(const CContactDatabase& aDb,CContactViewBase& aView,MContactViewObserver& aObserver,const TContactItemId aGroupId,const TGroupType aGroupType);
       
    66 	IMPORT_C static CContactGroupView* NewL(const CContactDatabase& aDb,CContactViewBase& aView,MContactViewObserver& aObserver, const TDesC& aGroupName,const TGroupType aGroupType);
       
    67 
       
    68 	// Factory constructor for version 2 behaviour
       
    69 	IMPORT_C static CContactGroupView* NewL(CContactViewBase& aView,const CContactDatabase& aDb, MContactViewObserver& aObserver,const TContactItemId aGroupId,const TGroupType aGroupType);
       
    70 	// Factory constructor for version 2 behaviour
       
    71 	IMPORT_C static CContactGroupView* NewL(CContactViewBase& aView,const CContactDatabase& aDb, MContactViewObserver& aObserver, const TDesC& aGroupName,const TGroupType aGroupType);	
       
    72 	//All CContactViewBase derived classes in public headers,
       
    73 	//should mandatorily implement this reserved function.	
       
    74 	TAny* CContactViewBase_Reserved_1(TFunction aFunction,TAny* aParams);
       
    75 	~CContactGroupView();
       
    76 public: // From CContactViewBase
       
    77 	TContactItemId AtL(TInt aIndex) const;
       
    78 	TInt CountL() const;
       
    79 	TInt FindL(TContactItemId aId) const;
       
    80 	HBufC* AllFieldsLC(TInt aIndex,const TDesC& aSeparator) const;
       
    81 	const CViewContact& ContactAtL(TInt aIndex) const;
       
    82 	TContactViewPreferences ContactViewPreferences();
       
    83 	const RContactViewSortOrder& SortOrderL() const;
       
    84 protected:
       
    85 	IMPORT_C virtual void UpdateGroupViewL();
       
    86 private: // From MContactViewObserver.
       
    87 	void HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent);
       
    88 private: 
       
    89 	void ConstructL(MContactViewObserver& aObserver,TContactItemId aGroupId);
       
    90 	void UpdateForContactsInGroupL();
       
    91 	void UpdateForContactsNotInThisGroupL();
       
    92 	void UpdateForUnfiledContactsL();
       
    93 	void UpdateForContactListL(const CContactIdArray* aArray);
       
    94 	TContactItemId GetGroupIdbyNameL(const TDesC& aGroupName);
       
    95 	TBool HandleRemoveEventL(TContactViewEvent& aEvent);
       
    96 	TBool HandleAddEventL(TContactViewEvent& aEvent);
       
    97 	TBool HandleAddEventForUnfiledContactsL(const TContactViewEvent& aEvent );
       
    98 	static TInt CompareMappingsL(const TContactIdWithMapping& aFirst,const TContactIdWithMapping& aSecond);
       
    99 	TInt static CompareIndexesAllowingDuplicates(const TContactIdWithMapping& aFirst, const TContactIdWithMapping& aSecond);
       
   100 private:
       
   101 	CContactGroupView(const CContactDatabase& aDb,CContactViewBase& aView,TGroupType aGroupType);
       
   102 	void UpdateMappingsL();
       
   103 	void NotifyRemovedMembersL(const CContactIdArray* aArray);
       
   104 private:
       
   105 	RArray<TContactIdWithMapping> iGroupContacts;
       
   106 	TContactItemId iGroupId;
       
   107 	CContactViewBase& iView;
       
   108 	TGroupType iGroupType;
       
   109 	TUint iClassVersion; //version class - used for TContactViewEvent dispatching
       
   110 	};
       
   111 
       
   112 
       
   113 class CContactFindView: public CContactViewBase, public MContactViewObserver
       
   114 /** Provides a view of an existing CContactViewBase-derived object, populated using 
       
   115 search criteria.
       
   116 
       
   117 The find view only contains contact items from the underlying view that match 
       
   118 the search criteria.
       
   119 
       
   120 The find view observes its underlying view so that it is kept up to date if 
       
   121 the contents of the underlying view change.
       
   122 
       
   123 The search criteria (one or more words) are held in an MDesCArray object. 
       
   124 The fields involved in the search are those that have been used to sort the 
       
   125 underlying view. 
       
   126 @publishedAll
       
   127 @released
       
   128 */
       
   129 	{
       
   130 public:
       
   131 	IMPORT_C static CContactFindView* NewL(const CContactDatabase& aDb,CContactViewBase& aView,MContactViewObserver& aObserver,MDesCArray* aFindWords);
       
   132 	IMPORT_C static CContactFindView* NewL(const CContactDatabase& aDb,CContactViewBase& aView,MContactViewObserver& aObserver,MDesCArray* aFindWords, TSearchType aSearchType);
       
   133 	
       
   134 	// Factory constructor for version 2 behaviour
       
   135 	IMPORT_C static CContactFindView* NewL(CContactViewBase& aView,const CContactDatabase& aDb,MContactViewObserver& aObserver,MDesCArray* aFindWords);
       
   136 	// Factory constructor for version 2 behaviour
       
   137 	IMPORT_C static CContactFindView* NewL(CContactViewBase& aView,const CContactDatabase& aDb,MContactViewObserver& aObserver,MDesCArray* aFindWords, TSearchType aSearchType);
       
   138 
       
   139 	~CContactFindView();
       
   140 public: // From CContactViewBase
       
   141 	TContactItemId AtL(TInt aIndex) const;
       
   142 	TInt CountL() const;
       
   143 	TInt FindL(TContactItemId aId) const;
       
   144 	HBufC* AllFieldsLC(TInt aIndex,const TDesC& aSeparator) const;
       
   145 	const CViewContact& ContactAtL(TInt aIndex) const;
       
   146 	TContactViewPreferences ContactViewPreferences();
       
   147 	const RContactViewSortOrder& SortOrderL() const;
       
   148 protected:
       
   149 	IMPORT_C virtual void UpdateFindViewL();
       
   150 public:
       
   151 	IMPORT_C void RefineFindViewL(MDesCArray* aFindWords);
       
   152 	//All CContactViewBase derived classes in public headers,
       
   153 	//should mandatorily implement this reserved function.	
       
   154 	TAny* CContactViewBase_Reserved_1(TFunction aFunction,TAny* aParams);
       
   155 private: // From MContactViewObserver.
       
   156 	virtual void HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent);
       
   157 private: 
       
   158 	void ConstructL(MContactViewObserver& aObserver,MDesCArray* aFindWords);
       
   159 	void DeleteFindContacts();
       
   160 	void TightenFindViewCriteriaL();
       
   161 	void HandleRemoveEventL(TContactViewEvent& aEvent);
       
   162 	void HandleAddEventL(TContactViewEvent& aEvent);
       
   163 	void CopyNewFindWordsL(MDesCArray* aFindWords);
       
   164 	void DestroyFindWordsArray();
       
   165 	TInt InsertContact(const CViewContact* aNewContact);
       
   166 private:
       
   167 	CContactFindView(const CContactDatabase& aDb,CContactViewBase& aView, TSearchType aSearchType);
       
   168 private:
       
   169 	RPointerArray<CViewContact> iFindContacts;
       
   170 	CPtrCArray* iFindWords;
       
   171 	CContactViewBase& iView;
       
   172 	const TSearchType iSearchType;
       
   173 	TUint iClassVersion; //version class - used for TContactViewEvent dispatching
       
   174 	};
       
   175 
       
   176 
       
   177 class CContactFilteredView : public CContactViewBase, public MContactViewObserver
       
   178 /** Provides a filtered view over an existing CContactViewBase derived object.
       
   179 
       
   180 For example, it might provide a view containing only contacts that have an 
       
   181 email address. For efficiency reasons there are a limited set of filters available 
       
   182 (defined in CContactDatabase::TContactViewFilter).
       
   183 
       
   184 The filtered view observes its underlying view so that it is kept up to date 
       
   185 if the contents of the underlying view change. It will, in turn, notify its 
       
   186 observers.
       
   187 
       
   188 Filters only apply to non-hidden contact fields with content. 
       
   189 @publishedAll
       
   190 @released
       
   191 */
       
   192 	{
       
   193 public:
       
   194 	IMPORT_C static CContactFilteredView* NewL(MContactViewObserver& aObserver,const CContactDatabase& aDb,CContactViewBase& aView,TInt aFilter);
       
   195 	// Factory constructor for version 2 behaviour
       
   196 	IMPORT_C static CContactFilteredView* NewL(CContactViewBase& aView,const CContactDatabase& aDb,MContactViewObserver& aObserver,TInt aFilter);
       
   197 
       
   198 	//All CContactViewBase derived classes in public headers,
       
   199 	//should mandatorily implement this reserved function.	
       
   200 	TAny* CContactViewBase_Reserved_1(TFunction aFunction,TAny* aParams);
       
   201 	~CContactFilteredView();
       
   202 public: // From CContactViewBase.
       
   203 	TContactItemId AtL(TInt aIndex) const;
       
   204 	TInt CountL() const;
       
   205 	TInt FindL(TContactItemId aId) const;
       
   206 	HBufC* AllFieldsLC(TInt aIndex,const TDesC& aSeparator) const;
       
   207 	const CViewContact& ContactAtL(TInt aIndex) const;
       
   208 	TContactViewPreferences ContactViewPreferences();
       
   209 	const RContactViewSortOrder& SortOrderL() const;
       
   210 	virtual void ContactsMatchingCriteriaL(const MDesCArray& aFindWords,RPointerArray<CViewContact>& aMatchedContacts);
       
   211 	virtual void ContactsMatchingPrefixL(const MDesCArray& aFindWords, RPointerArray<CViewContact>& aMatchedContacts);
       
   212 private: // From MContactViewObserver.
       
   213 	virtual void HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent);
       
   214 private:
       
   215 	CContactFilteredView(const CContactDatabase& aDb,TInt aFilter,CContactViewBase& aView);
       
   216 	void ConstructL(MContactViewObserver& aObserver);
       
   217 	void CreateFilteredIdArray();
       
   218 	void UpdateFilteredIdArrayL(TContactViewEvent& aEvent, TBool& aViewModified);
       
   219 	void HandleAddEventL(TContactViewEvent& aEvent, TBool& aViewModified);
       
   220 	void HandleRemoveEventL(TContactViewEvent& aEvent, TBool& aViewModified);
       
   221 	TInt BinaryInsertL(TContactIdWithMapping aId);
       
   222 	static TInt FilterCallBack(TAny* aSelf);
       
   223 	static TBool CompareMappings(const TContactIdWithMapping& aFirst,const TContactIdWithMapping& aSecond);
       
   224 	void FilterResultsArray(RPointerArray<CViewContact>& aMatchedContacts);
       
   225 	TInt DoFilterIncrementL();
       
   226 	void UpdateMappingsL();
       
   227 private:
       
   228 	const TInt iFilter;
       
   229 	CContactViewBase& iView;
       
   230 	RArray<TContactIdWithMapping> iFilteredIdArray;
       
   231 	TUint iClassVersion; //version class - used for TContactViewEvent dispatching
       
   232 	};
       
   233 
       
   234 
       
   235 class CContactViewRangeBase : public CBase
       
   236 /** The abstract base class for all contact view range classes.
       
   237 
       
   238 Range classes are used by contact sub views to specify the upper and lower 
       
   239 range boundaries and for searching their underlying view.
       
   240 
       
   241 @see CContactSubView 
       
   242 @publishedAll
       
   243 @released
       
   244 */
       
   245 	{
       
   246 public:
       
   247 	/** Defines the range criteria. */
       
   248 	enum TCriteria
       
   249 		{
       
   250 		/** Less than. */
       
   251 		ELessThan,
       
   252 		/** Less than or equal to. */
       
   253 		ELessThanOrEqualTo,
       
   254 		/** Greater than. */
       
   255 		EGreaterThan,
       
   256 		/** Greater than or equal to. */
       
   257 		EGreaterThanOrEqualTo
       
   258 		};
       
   259 public:
       
   260 	~CContactViewRangeBase();
       
   261 	inline TInt LowIndex() const;
       
   262 	inline TInt HighIndex() const;
       
   263 	/** Sets the iLow and iHigh members. */
       
   264 	virtual void SetL()=0;
       
   265 	IMPORT_C TBool IndicesValid() const;
       
   266 protected:
       
   267 	CContactViewRangeBase(const CContactViewBase& aView);
       
   268 	void ConstructL();
       
   269 	TInt FindIndexL(const TDesC& aMatch,TCriteria aCriteria) const;
       
   270 	TBool MatchesCriteriaL(TCriteria aCriteria,const TDesC& aMatch,TInt aIndex) const;
       
   271 	void ValidateIndices();
       
   272 protected:
       
   273 	/** The sub view's underlying view. */
       
   274 	const CContactViewBase& iView;
       
   275 	/** The index into the sub view's underlying view of the item at the lower limit 
       
   276 	of the range. */
       
   277 	TInt iLow;
       
   278 	/** The index into the sub view's underlying view of the item at the upper limit 
       
   279 	of the range. */
       
   280 	TInt iHigh;
       
   281 	/** The collation method used to sort the strings.
       
   282 	
       
   283 	By default, this is the standard collation method for the current locale. */
       
   284 	TCollationMethod* iCollateMethod;
       
   285 	};
       
   286 
       
   287 
       
   288 class CContactViewRange : public CContactViewRangeBase
       
   289 /** A sub view range with both a lower and upper limit.
       
   290 
       
   291 This is used by sub views when lower and upper boundary criteria are specified.
       
   292 
       
   293 @see CContactSubView 
       
   294 @publishedAll
       
   295 @released
       
   296 */
       
   297 	{
       
   298 public:
       
   299 	~CContactViewRange();
       
   300 	IMPORT_C static CContactViewRange* NewL(const CContactViewBase& aView,const TDesC& aLowMatch,TCriteria aLowCriteria,const TDesC& aHighMatch,TCriteria aHighCriteria);
       
   301 private: // From CContactViewRangeBase.
       
   302 	void SetL();
       
   303 private:
       
   304 	CContactViewRange(const CContactViewBase& aView,const TDesC& aLowMatch,TCriteria aLowCriteria,const TDesC& aHighMatch,TCriteria aHighCriteria);
       
   305 	void ConstructL();
       
   306 private:
       
   307 	TBuf<KMaxBoundaryMatchLength> iLowMatch;
       
   308 	TCriteria iLowCriteria;
       
   309 	TBuf<KMaxBoundaryMatchLength> iHighMatch;
       
   310 	TCriteria iHighCriteria;
       
   311 	};
       
   312 
       
   313 
       
   314 class CContactViewLowRange : public CContactViewRangeBase
       
   315 /** A sub view range with an upper limit only.
       
   316 
       
   317 This is used by sub views when the range criteria are CContactViewRangeBase::ELessThan 
       
   318 or CContactViewRangeBase::ELessThanOrEqualTo.
       
   319 
       
   320 @see CContactSubView 
       
   321 @publishedAll
       
   322 @released
       
   323 */
       
   324 	{
       
   325 public:
       
   326 	IMPORT_C static CContactViewLowRange* NewL(const CContactViewBase& aView,const TDesC& aMatch,TCriteria aCriteria);
       
   327 private: // From CContactViewRangeBase.
       
   328 	void SetL();
       
   329 private:
       
   330 	CContactViewLowRange(const CContactViewBase& aView,const TDesC& aMatch,TCriteria aCriteria);
       
   331 	~CContactViewLowRange();
       
   332 private:
       
   333 	TBuf<KMaxBoundaryMatchLength> iMatch;
       
   334 	TCriteria iCriteria;
       
   335 	};
       
   336 
       
   337 
       
   338 class CContactViewHighRange : public CContactViewRangeBase
       
   339 /** A sub view range with a lower limit only.
       
   340 
       
   341 This is used by sub views when the range criteria are CContactViewRangeBase::EGreaterThan 
       
   342 or CContactViewRangeBase::EGreaterThanOrEqualTo.
       
   343 
       
   344 @see CContactSubView 
       
   345 @publishedAll
       
   346 @released
       
   347 */
       
   348 	{
       
   349 public:
       
   350 	IMPORT_C static CContactViewHighRange* NewL(const CContactViewBase& aView,const TDesC& aMatch,TCriteria aCriteria);
       
   351 private: // From CContactViewRangeBase.
       
   352 	void SetL();
       
   353 private:
       
   354 	CContactViewHighRange(const CContactViewBase& aView,const TDesC& aMatch,TCriteria aCriteria);
       
   355 	~CContactViewHighRange();
       
   356 private:
       
   357 	TBuf<KMaxBoundaryMatchLength> iMatch;
       
   358 	TCriteria iCriteria;
       
   359 	};
       
   360 
       
   361 
       
   362 class CContactSubView : public CContactViewBase, public MContactViewObserver
       
   363 /** Provides a view of a range of contact items from a potentially larger underlying 
       
   364 view (another CContactViewBase-derived object).
       
   365 
       
   366 All contact items between a lower and upper boundary in the underlying view 
       
   367 are included in the sub view. For example, the sub view might contain all 
       
   368 items whose name begins with a character between 'd' and 'f'.
       
   369 
       
   370 The sub view observes its underlying view so that as the underlying view changes, 
       
   371 the sub view is kept up to date. 
       
   372 @publishedAll
       
   373 @released
       
   374 */
       
   375 	{
       
   376 public:
       
   377 	IMPORT_C static CContactSubView* NewL(MContactViewObserver& aObserver,const CContactDatabase& aDb,CContactViewBase& aView,const TDesC& aBoundary);//>= > is infinity <= < =0;
       
   378 	IMPORT_C static CContactSubView* NewL(MContactViewObserver& aObserver,const CContactDatabase& aDb,CContactViewBase& aView,const TDesC& aLowBoundary,const TDesC& aHighBoundary);
       
   379 	
       
   380 	// Factory constructor for version 2 behaviour
       
   381 	IMPORT_C static CContactSubView* NewL(CContactViewBase& aView,const CContactDatabase& aDb,MContactViewObserver& aObserver,const TDesC& aBoundary);//>= > is infinity <= < =0;
       
   382 	// Factory constructor for version 2 behaviour
       
   383 	IMPORT_C static CContactSubView* NewL(CContactViewBase& aView,const CContactDatabase& aDb,MContactViewObserver& aObserver,const TDesC& aLowBoundary,const TDesC& aHighBoundary);
       
   384 
       
   385 	//All CContactViewBase derived classes in public headers,
       
   386 	//should mandatorily implement this reserved function.	
       
   387 	TAny* CContactViewBase_Reserved_1(TFunction aFunction,TAny* aParams);
       
   388 public: // From CContactViewBase.
       
   389 	TContactItemId AtL(TInt aIndex) const;
       
   390 	TInt CountL() const;
       
   391 	TInt FindL(TContactItemId aId) const;
       
   392 	HBufC* AllFieldsLC(TInt aIndex,const TDesC& aSeparator) const;
       
   393 	const CViewContact& ContactAtL(TInt aIndex) const;
       
   394 	TContactViewPreferences ContactViewPreferences();
       
   395 	const RContactViewSortOrder& SortOrderL() const;
       
   396 private: // From MContactViewObserver.
       
   397 	virtual void HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent);
       
   398 private:
       
   399 	~CContactSubView();
       
   400 	CContactSubView(const CContactDatabase& aDb,CContactViewBase& aView);
       
   401 	CContactSubView(const CContactDatabase& aDb,const CContactSubView& aView);
       
   402 	void CommonConstructL(MContactViewObserver& aObserver);
       
   403 	void ConstructL(MContactViewObserver& aObserver,const TDesC& aBoundary);
       
   404 	void ConstructL(MContactViewObserver& aObserver,const CContactSubView& aView);
       
   405 	void ConstructL(MContactViewObserver& aObserver,const CContactSubView& aView,const TDesC& aBoundary);
       
   406 	void ConstructL(MContactViewObserver& aObserver,const TDesC& aLowBoundary,const TDesC& aHighBoundary);
       
   407 	CContactViewRangeBase::TCriteria DecodeBoundary(TDes& aBoundary) const;
       
   408 	TInt MapToUnderlyingViewIndex(TInt aSubViewIndex) const;
       
   409 	TInt MapToSubViewIndex(TInt aUnderlyingViewIndex) const;
       
   410 private:
       
   411 	CContactViewBase& iView;
       
   412 	CContactViewRangeBase* iRange;
       
   413 	TUint iClassVersion; //version class - used for TContactViewEvent dispatching
       
   414 	};
       
   415 
       
   416 
       
   417 class CContactConcatenatedView : public CContactViewBase, public MContactViewObserver
       
   418 /** Concatenates multiple contact views into a single contiguous view.
       
   419 
       
   420 The component views are ordered according to their order in the array passed 
       
   421 into the NewL(). 
       
   422 @publishedAll
       
   423 @released
       
   424 */
       
   425 	{
       
   426 public:
       
   427 	IMPORT_C static CContactConcatenatedView* NewL(MContactViewObserver& aObserver,const CContactDatabase& aDb,RPointerArray<CContactViewBase>& aComponentViews);
       
   428 	//All CContactViewBase derived classes in public headers,
       
   429 	//should mandatorily implement this reserved function.	
       
   430 	TAny* CContactViewBase_Reserved_1(TFunction aFunction,TAny* aParams);
       
   431 public: // From CContactViewBase.
       
   432 	TContactItemId AtL(TInt aIndex) const;
       
   433 	TInt CountL() const;
       
   434 	TInt FindL(TContactItemId aId) const;
       
   435 	HBufC* AllFieldsLC(TInt aIndex,const TDesC& aSeparator) const;
       
   436 	const CViewContact& ContactAtL(TInt aIndex) const;
       
   437 	TContactViewPreferences ContactViewPreferences();
       
   438 	const RContactViewSortOrder& SortOrderL() const;
       
   439 private: // From MContactViewObserver.
       
   440 	virtual void HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent);
       
   441 private:
       
   442 	struct TComponentView
       
   443 		{
       
   444 		TComponentView(CContactViewBase& aView,TState aState);
       
   445 		CContactViewBase& iView;
       
   446 		TState iState;
       
   447 		};
       
   448 private:
       
   449 	~CContactConcatenatedView();
       
   450 	CContactConcatenatedView(const CContactDatabase& aDb);
       
   451 	void ConstructL(MContactViewObserver& aObserver,RPointerArray<CContactViewBase>& aComponentViews);
       
   452 	void CopyComponentViewsL(RPointerArray<CContactViewBase>& aComponentViews);
       
   453 	void OpenComponentViewsL();
       
   454 	void CloseComponentViews();
       
   455 	TBool ComponentViewsReady();
       
   456 	void SetComponentViewReady(const CContactViewBase& aView);
       
   457 	TInt OffsetL(const CContactViewBase& aView);
       
   458 	static TBool ComponentViewsEqual(const TComponentView& aFirst,const TComponentView& aSecond);
       
   459 	TInt FindComponentView(const CContactViewBase& aView);
       
   460 private:
       
   461 	RArray<TComponentView> iComponentView;
       
   462 	};
       
   463 
       
   464 
       
   465 inline TInt CContactViewRangeBase::LowIndex() const 
       
   466 /** Gets the index into the sub view's underlying view of the item at the bottom 
       
   467 of the range.
       
   468 
       
   469 @return The index of the item at the bottom of the range. */
       
   470 	{ return iLow; }
       
   471 
       
   472 inline TInt CContactViewRangeBase::HighIndex() const 
       
   473 /** Gets the index into the sub view's underlying view of the item at the top of 
       
   474 the range.
       
   475 	
       
   476 @return The index of the item at the top of the range. */
       
   477 	{ return iHigh; }
       
   478 
       
   479 #endif