diff -r 5b6f26637ad3 -r f4a778e096c2 phonebookui/Phonebook2/UIControls/src/CPbk2MemoryEntryDefaultsAssignDlg.cpp --- /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 + +// Phonebook 2 +#include "MPbk2ClipListBoxText.h" +#include "CPbk2FieldListBoxModel.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Virtual Phonebook +#include +#include +#include +#include +#include + +// System includes +#include +#include +#include +#include +#include + +// Debugging headers +#include +#include + +/// 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( + 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 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