phonebookui/Phonebook2/UIControls/src/CPbk2MemoryEntryDefaultsAssignDlg.cpp
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
child 68 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/UIControls/src/CPbk2MemoryEntryDefaultsAssignDlg.cpp	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,312 @@
+/*
+* Copyright (c) 2005-2007 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 memory entry defaults assign dialog.
+*
+*/
+
+
+#include <CPbk2MemoryEntryDefaultsAssignDlg.h>
+
+// Phonebook 2
+#include "MPbk2ClipListBoxText.h"
+#include "CPbk2FieldListBoxModel.h"
+#include <CPbk2IconInfo.h>
+#include <CPbk2IconArray.h>
+#include <Pbk2UIControls.rsg>
+#include <CPbk2PresentationContact.h>
+#include <CPbk2PresentationContactField.h>
+#include <CPbk2PresentationContactFieldCollection.h>
+#include <CPbk2FieldPropertyArray.h>
+#include <CPbk2ApplicationServices.h>
+#include <CPbk2ServiceManager.h>
+#include <MPbk2ApplicationServices.h>
+
+// Virtual Phonebook
+#include <CVPbkFieldTypeSelector.h>
+#include <CVPbkContactManager.h>
+#include <CVPbkFieldFilter.h>
+#include <MVPbkFieldType.h>
+#include <MVPbkContactFieldData.h>
+
+// System includes
+#include <aknlists.h>
+#include <StringLoader.h>
+#include <aknPopup.h>
+#include <barsread.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+
+// Debugging headers
+#include <Pbk2Config.hrh>
+#include <Pbk2Debug.h>
+
+/// Unnamed namespace for local definitions
+namespace {
+
+// LOCAL CONSTANTS AND MACROS
+
+static const TInt KMaxIntLength( 15 );
+
+} /// namespace
+
+// --------------------------------------------------------------------------
+// CPbk2MemoryEntryDefaultsAssignDlg::CPbk2MemoryEntryDefaultsAssignDlg
+// --------------------------------------------------------------------------
+//
+CPbk2MemoryEntryDefaultsAssignDlg::CPbk2MemoryEntryDefaultsAssignDlg()
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2MemoryEntryDefaultsAssignDlg::~CPbk2MemoryEntryDefaultsAssignDlg
+// --------------------------------------------------------------------------
+//
+CPbk2MemoryEntryDefaultsAssignDlg::~CPbk2MemoryEntryDefaultsAssignDlg()
+    {
+    Release( iAppServices );
+    
+    if ( iDestroyedPtr )
+        {
+        *iDestroyedPtr = ETrue;
+        }
+    if ( iPopupList )
+        {
+        iPopupList->CancelPopup();
+        }
+    delete iListBox;
+    delete iModel;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2MemoryEntryDefaultsAssignDlg::NewL
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPbk2MemoryEntryDefaultsAssignDlg*
+        CPbk2MemoryEntryDefaultsAssignDlg::NewL()
+    {
+    CPbk2MemoryEntryDefaultsAssignDlg* self =
+        new ( ELeave ) CPbk2MemoryEntryDefaultsAssignDlg();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2MemoryEntryDefaultsAssignDlg::ConstructL
+// --------------------------------------------------------------------------
+//
+void CPbk2MemoryEntryDefaultsAssignDlg::ConstructL()
+    {
+    iAppServices = CPbk2ApplicationServices::InstanceL();
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2MemoryEntryDefaultsAssignDlg::ExecuteLD
+// --------------------------------------------------------------------------
+//
+EXPORT_C TInt CPbk2MemoryEntryDefaultsAssignDlg::ExecuteLD
+        ( const CPbk2PresentationContactFieldCollection& aFields,
+          const CVPbkContactManager& aManager,
+          const MPbk2FieldPropertyArray& aFieldProperties,
+          const VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aSelectorID )
+    {
+    CleanupStack::PushL( this );
+    TBool thisDestroyed = EFalse;
+    iDestroyedPtr = &thisDestroyed;
+    TInt index = KErrCancel;
+    iSelectorId = aSelectorID;
+
+    PreparePopupL( aFields, aManager, aFieldProperties );
+
+    TBool result = EFalse;
+    TRAPD( err, result = iPopupList->ExecuteLD() );
+    // Reset iPopupList member
+    if ( !thisDestroyed )
+        {
+        iPopupList = NULL;
+        }
+    // Rethrow any error
+    if ( err != KErrNone )
+        {
+        User::Leave( err );
+        }
+
+    if ( thisDestroyed )
+        {
+        index = KErrNotFound;
+        CleanupStack::Pop(); // this
+        }
+    else
+        {
+        if ( result )
+            {
+            index = iModel->GetModelIndex( iListBox->CurrentItemIndex() );
+            }
+        CleanupStack::PopAndDestroy(); // this
+        }
+
+    return index;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2MemoryEntryDefaultsAssignDlg::ClipFromBeginning
+// --------------------------------------------------------------------------
+//
+TBool CPbk2MemoryEntryDefaultsAssignDlg::ClipFromBeginning
+        ( TDes& aBuffer, TInt aItemIndex, TInt aSubCellNumber )
+    {
+    return AknTextUtils::ClipToFit(
+        aBuffer,
+        AknTextUtils::EClipFromBeginning,
+        iListBox,
+        aItemIndex,
+        aSubCellNumber );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2MemoryEntryDefaultsAssignDlg::PreparePopupL
+// --------------------------------------------------------------------------
+//
+inline void CPbk2MemoryEntryDefaultsAssignDlg::PreparePopupL
+        ( const CPbk2PresentationContactFieldCollection& aFields,
+          const CVPbkContactManager& aManager,
+          const MPbk2FieldPropertyArray& aFieldProperties )
+    {
+    // Create a list box
+    iListBox = static_cast<CEikFormattedCellListBox*>(
+        EikControlFactory::CreateByTypeL(
+            EAknCtDoubleGraphicPopupMenuListBox).iControl );
+
+    // Create a popup list
+
+    CAknPopupList* popupList = CAknPopupList::NewL(
+        iListBox,
+        R_AVKON_SOFTKEYS_OK_CANCEL__OK,
+        AknPopupLayouts::EMenuDoubleLargeGraphicWindow );
+
+
+    CleanupStack::PushL( popupList );
+
+    // Init list box
+    iListBox->ConstructL( popupList, CEikListBox::ELeftDownInViewRect );
+    iListBox->CreateScrollBarFrameL( ETrue );
+    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+        CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+
+    // Set title of popup list
+    HBufC* heading = StringLoader::LoadLC
+        ( R_QTN_PHOB_TITLE_SELECT_DEFAULT );
+    popupList->SetTitleL(*heading);
+    CleanupStack::PopAndDestroy(heading);
+
+    // Set icons
+    TResourceReader reader;
+    CCoeEnv::Static()->CreateResourceReaderLC
+        ( reader, R_PBK2_FIELDTYPE_ICONS );
+    CPbk2IconArray* iconArray = CPbk2IconArray::NewL( reader );
+    
+    //Calculate preferred size for xsp service icons 
+    TRect mainPane;
+    AknLayoutUtils::LayoutMetricsRect(
+        AknLayoutUtils::EMainPane, mainPane );
+    TAknLayoutRect listLayoutRect;
+    listLayoutRect.LayoutRect(
+        mainPane,
+        AknLayoutScalable_Avkon::list_single_graphic_pane_g1(0).LayoutLine() );
+    TSize size(listLayoutRect.Rect().Size());
+    
+    // Add xsp service icons
+    CPbk2ServiceManager& servMan(iAppServices->ServiceManager()); 
+    
+    const CPbk2ServiceManager::RServicesArray& services = servMan.Services();
+    TUid uid;
+    uid.iUid = KPbk2ServManId;
+    for ( TInt i = 0; i < services.Count(); i++ )
+        {
+        const CPbk2ServiceManager::TService& service = services[i];
+        if ( service.iBitmapId && service.iBitmap )
+            {
+        	AknIconUtils::SetSize(
+        	           service.iBitmap,
+        	           size );
+        	AknIconUtils::SetSize(
+        	           service.iMask,
+        	           size );            
+            TPbk2IconId id = TPbk2IconId( uid, services[i].iBitmapId );
+            CPbk2IconInfo* info = CPbk2IconInfo::NewLC(
+                id, services[i].iBitmap, services[i].iMask, size );
+            iconArray->AppendIconL(info);
+            CleanupStack::Pop(info);
+            }
+        }    
+    
+    CleanupStack::PopAndDestroy(); // reader
+    iListBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray );
+
+    // Create model
+    CreateModelL( aFields, aManager, aFieldProperties, *iconArray );
+
+    CleanupStack::Pop(); // popupList
+    iPopupList = popupList;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2MemoryEntryDefaultsAssignDlg::CreateModelL
+// --------------------------------------------------------------------------
+//
+inline void CPbk2MemoryEntryDefaultsAssignDlg::CreateModelL
+        ( const CPbk2PresentationContactFieldCollection& aFields,
+          const CVPbkContactManager& aManager,
+          const MPbk2FieldPropertyArray& aFieldProperties,
+          const CPbk2IconArray& aIconArray )
+    {
+    HBufC* timeFormat = CCoeEnv::Static()->AllocReadResourceLC
+        ( R_QTN_DATE_USUAL );
+
+    CPbk2FieldListBoxModel::TParams params(
+        aFields,
+        aManager,
+        aFieldProperties,
+        *timeFormat,
+        aIconArray,
+        NULL,   // analyzer not used
+        NULL,   // dynamic properties are not used
+        ETrue );// the list items will be duplicated if their content are the same 
+
+    iModel = CPbk2FieldListBoxModel::NewL( params );    
+    iModel->FormatFieldsL();            
+    CleanupStack::PopAndDestroy( timeFormat );
+    iModel->SetClipper( *this );
+
+    // Insert TEXT_NO_DEFAULT as the last item to the array
+    CPbk2FieldListBoxRow* row = CPbk2FieldListBoxRow::NewL();
+	CleanupStack::PushL( row );
+	TBuf<KMaxIntLength> iconBuffer;
+	_LIT( KIcon, "%d" );
+	iconBuffer.Format( KIcon, aIconArray.FindIcon(
+	    TPbk2AppIconId( EPbk2qgn_prop_nrtyp_empty )));
+	row->AppendColumnL( iconBuffer );
+	HBufC* text = StringLoader::LoadLC( R_QTN_PHOB_SETI_NO_DEFAULT );
+	row->AppendColumnL( *text );
+	CleanupStack::PopAndDestroy( text );
+	row->AppendColumnL( KNullDesC ); // empty label column
+	iModel->AppendRowL( row );
+	CleanupStack::Pop( row );
+
+    iListBox->Model()->SetItemTextArray( iModel );
+    iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
+    iListBox->Reset();
+    }
+
+// End of File