--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewdoublelistbox.cpp Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,280 @@
+/*
+* Copyright (c) 2009-2009 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: Phonebook 2 contact view double list box.
+*
+*/
+
+
+// INCLUDE FILES
+#include "cpbk2contactviewdoublelistbox.h"
+
+#include <eikclbd.h>
+#include <AknLayout2ScalableDef.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include "cpbk2doublelistboxmodelcmddecorator.h"
+
+//Virtual phonebook
+#include <MVPbkContactViewBase.h>
+#include <MVPbkViewContact.h>
+#include <MVPbkContactLink.h>
+
+//Internal
+#include "cpbk2contactviewdoublelistboxmodel.h"
+#include "CPbk2IconArray.h"
+
+
+
+// --------------------------------------------------------------------------
+// CPbk2ContactViewDoubleListBox::CPbk2ContactViewDoubleListBox
+// --------------------------------------------------------------------------
+//
+CPbk2ContactViewDoubleListBox::CPbk2ContactViewDoubleListBox(
+ CCoeControl& aContainer,
+ MPbk2ContactUiControlExtension* aUiExtension,
+ CPbk2PredictiveSearchFilter& aSearchFilter,
+ MPbk2FilteredViewStack& aView,
+ CPbk2ThumbnailManager& aThumbManager ) :
+ CPbk2ContactViewListBox( aContainer, aUiExtension, aSearchFilter ),
+ iView( aView ),
+ iThumbManager( aThumbManager )
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactViewDoubleListBox::~CPbk2ContactViewDoubleListBox
+// --------------------------------------------------------------------------
+//
+CPbk2ContactViewDoubleListBox::~CPbk2ContactViewDoubleListBox()
+ {
+ // reset thumbnails
+ iThumbManager.Reset();
+
+ // icon array is destroyed, remove it from the manager
+ iThumbManager.RemoveIconArray();
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactViewDoubleListBox::NewL
+// --------------------------------------------------------------------------
+//
+CPbk2ContactViewDoubleListBox* CPbk2ContactViewDoubleListBox::NewL(
+ CCoeControl& aContainer,
+ TResourceReader& aResourceReader,
+ const CVPbkContactManager& aManager,
+ MPbk2FilteredViewStack& aView,
+ MPbk2ContactNameFormatter& aNameFormatter,
+ CPbk2StorePropertyArray& aStoreProperties,
+ MPbk2ContactUiControlExtension* aUiExtension,
+ CPbk2PredictiveSearchFilter& aSearchFilter,
+ CPbk2ThumbnailManager& aThumbManager )
+ {
+ CPbk2ContactViewDoubleListBox* self =
+ new ( ELeave ) CPbk2ContactViewDoubleListBox( aContainer,aUiExtension, aSearchFilter, aView, aThumbManager );
+ CleanupStack::PushL( self );
+ self->ConstructL( aContainer, aResourceReader, aManager,
+ aView, aNameFormatter, aStoreProperties );
+
+
+
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactViewDoubleListBox::ConstructL
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactViewDoubleListBox::ConstructL(
+ CCoeControl& aContainer,
+ TResourceReader& aResourceReader,
+ const CVPbkContactManager& aManager,
+ MPbk2FilteredViewStack& aView,
+ MPbk2ContactNameFormatter& aNameFormatter,
+ CPbk2StorePropertyArray& aStoreProperties )
+ {
+ CPbk2ContactViewListBox::ConstructL( aContainer,
+ aResourceReader,
+ aManager,
+ aView,
+ aNameFormatter,
+ aStoreProperties );
+
+ // set icon array for the manager
+ iThumbManager.SetPbkIconArray( static_cast<CPbk2IconArray*>( ItemDrawer()->ColumnData()->IconArray() ) );
+ iThumbManager.SetDefaultIconId( iResourceData.iDefaultIconId );
+ }
+
+
+// --------------------------------------------------------------------------
+// CPbk2ContactViewDoubleListBox::DoCreateModelL
+// --------------------------------------------------------------------------
+//
+CPbk2ContactViewListBoxModel* CPbk2ContactViewDoubleListBox::DoCreateModelL(
+ CPbk2ContactViewListBoxModel::TParams params )
+ {
+ return CPbk2ContactViewDoubleListBoxModel::NewL(
+ params, iThumbManager );
+ }
+
+
+// --------------------------------------------------------------------------
+// CPbk2ContactViewDoubleListBox::DoCreateDecorator
+// --------------------------------------------------------------------------
+//
+CPbk2ListboxModelCmdDecorator* CPbk2ContactViewDoubleListBox::DoCreateDecoratorL(
+ const CPbk2IconArray& aIconArray,
+ TPbk2IconId aEmptyIconId,
+ TPbk2IconId aDefaultIconId )
+ {
+ return CPbk2DoubleListboxModelCmdDecorator::NewL(
+ aIconArray,
+ aEmptyIconId,
+ aDefaultIconId );
+ }
+
+
+// --------------------------------------------------------------------------
+// CPbk2ContactViewDoubleListBox::SizeChanged
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactViewDoubleListBox::SizeChanged()
+ {
+ CPbk2ContactViewListBox::SizeChanged();
+ TRAP_IGNORE( SizeChangedL() );
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactViewDoubleListBox::SizeChangedL
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactViewDoubleListBox::SizeChangedL()
+ {
+
+ // Modify list item format and layout.
+ // Text format: "0\tContactName\tStatusText\t1"
+ // Icons:
+ // 0: Contact thumbnail
+ // 1: Default listbox icon 1
+ //
+ // Layout: list_double_large_graphic_phob2_pane
+ // ------------------------------------------------
+ // | | |
+ // | | Contact Name [1] |
+ // | [0] | |
+ // | | Status Text |
+ // | | |
+ // ------------------------------------------------
+ //
+ CColumnListBoxItemDrawer* itemDrawer = ItemDrawer();
+ CColumnListBoxData* data = itemDrawer->ColumnData();
+
+ // LIST PANE LAYOUT
+ TAknWindowComponentLayout listPaneLayout( TAknWindowComponentLayout::Compose(
+ AknLayoutScalable_Apps::phob2_listscroll_pane( 0 ),
+ TAknWindowComponentLayout::Compose(
+ AknLayoutScalable_Apps::phob2_list_pane( 0 ),
+ AknLayoutScalable_Apps::list_double_large_graphic_phob2_pane( 0 ) ) ) );
+
+
+ TAknLayoutRect listPaneLayoutRect;
+ listPaneLayoutRect.LayoutRect( TRect( Size() ), listPaneLayout.LayoutLine() );
+ TRect listPaneRowRect( listPaneLayoutRect.Rect() );
+
+ SetHorizontalMargin( listPaneRowRect.iTl.iX );
+ SetVerticalMargin( listPaneRowRect.iTl.iY );
+ SetItemHeightL( listPaneRowRect.Height() );
+ itemDrawer->SetItemCellSize( listPaneRowRect.Size() );
+
+ // reset subcell definitions
+ data->ResetSLSubCellArray();
+
+ //THUMBNAIL SIZE
+ TAknWindowComponentLayout thumbnailLayout(
+ AknLayoutScalable_Apps::list_double_large_graphic_phob2_pane_g1( 0 ) );
+
+ TAknLayoutRect thumbnailLayoutRect;
+ thumbnailLayoutRect.LayoutRect( listPaneLayoutRect.Rect(), thumbnailLayout.LayoutLine() );
+ TRect thumbnailRect( thumbnailLayoutRect.Rect() );
+
+ // ADD ICON SIZE TO MANAGER
+ if( &iThumbManager )
+ {
+ iThumbManager.SetThumbnailIconSize( thumbnailRect.Size() );
+ }
+
+
+ // 1. THUMBNAIL ICON
+ data->SetGraphicSubCellL( 0, thumbnailLayout.LayoutLine() ); // cell index 0
+
+ // 2. TEXT ROW 1 (Contact Name)
+ TAknTextComponentLayout cntNameLayout(
+ AknLayoutScalable_Apps::list_double_large_graphic_phob2_pane_t1( 0 ) );
+ data->SetTextSubCellL( 1, cntNameLayout );// cell index 1
+
+ // 3. TEXT ROW 2 (Status Text)
+ TAknTextComponentLayout statusTextLayout(
+ AknLayoutScalable_Apps::list_double_large_graphic_phob2_pane_t2( 0 ) );
+ data->SetTextSubCellL( 2, statusTextLayout ); // cell index 2
+
+ // 4. LISTBOX DEFAULT GFX 1
+ TAknWindowLineLayout gfxLayout(
+ AknLayoutScalable_Apps::list_double_large_graphic_phob2_pane_g2( 0 ) );
+ data->SetGraphicSubCellL( 3, gfxLayout ); // cell index 3
+
+
+ // Conditional subcells must be added in priority order!
+ // Text row #1 variation for 1 post icon
+ cntNameLayout = AknLayoutScalable_Apps::list_double_large_graphic_phob2_pane_t1( 1 );
+ data->SetConditionalSubCellL( 3, cntNameLayout, 1 ); // cell index 3
+
+ // Marking
+ _LIT( KMarkReplacement, "-1" );
+ itemDrawer->SetItemMarkPosition( 3 ); // cell index 3
+ itemDrawer->SetItemMarkReplacement( KMarkReplacement );
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactViewDoubleListBox::ThumbnailLoadingComplete
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactViewDoubleListBox::ThumbnailLoadingComplete( TInt aError, TInt aIndex )
+ {
+ // there is a thumbnail
+ if( aError == KErrNone )
+ {
+ View()->DrawItem( aIndex );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactViewDoubleListBox::ThumbnailRemoved
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactViewDoubleListBox::ThumbnailRemoved( const MVPbkContactLink& /*aLink*/, TInt aIndex )
+ {
+ View()->DrawItem( aIndex );
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactViewDoubleListBox::LoadingFinished
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactViewDoubleListBox::LoadingFinished()
+ {
+ DrawNow();
+ }
+
+
+// End of File