diff -r a3a1ae9acec6 -r da5135c61bad emailcontacts/remotecontactlookup/engine/src/cpbkxrclresultinfodlg.cpp --- a/emailcontacts/remotecontactlookup/engine/src/cpbkxrclresultinfodlg.cpp Mon Mar 15 12:39:10 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,808 +0,0 @@ -/* -* 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 the class CPbkxRclResultInfoDlg. -* -*/ - - -#include "emailtrace.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include // MEikListBoxObserver - -// -#include - -#include "cpbkxrclresultinfodlg.h" -#include "cpbkxrclcbrsender.h" -#include "cpbkxrclvcardsender.h" -#include "cpbkxrclactionservicewrapper.h" -#include "mpbkxrclcontactretrieval.h" -#include "cpbkxrclcontactupdater.h" -#include "pbkxrclutils.h" -#include "pbkxrclengineconstants.h" -#include "engine.hrh" - -#include "fsccontactactionservicedefines.h" -// - -// S60 UID update -const TInt KPbkxRemoteContactLookupServiceImplImpUid = 0x2001FE0D; -// S60 UID update - -// list box field format -_LIT( KFieldFormat, "\t%S\t%S" ); - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::CPbkxRclResultInfoDlg -// --------------------------------------------------------------------------- -// -CPbkxRclResultInfoDlg::CPbkxRclResultInfoDlg( - TInt& aIndex, - CDesCArray* aArray, - MEikCommandObserver* aCommand, - MPbkxRclContactRetrieval* aContactRetrieval, - CPbkContactEngine& aContactEngine, - CPbkxRclActionServiceWrapper& aActionService, - TBool aContactSelectorEnabled, - TInt aActiveItemIndex ) : - CPbkxRclBaseDlg( aIndex, aArray, aCommand, EFalse ), iItems( aArray ), - iActiveTabIndex( aActiveItemIndex ), - iContactSelectorEnabled( aContactSelectorEnabled ), - iContactRetrieval( aContactRetrieval ), iContactEngine( aContactEngine ), - iContactActionService( aActionService ) - { - FUNC_LOG; - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::ConstructL -// --------------------------------------------------------------------------- -// -void CPbkxRclResultInfoDlg::ConstructL() - { - FUNC_LOG; - - CPbkxRclBaseDlg::ConstructL( R_RCL_RESULT_INFO_DIALOG_MENU_BAR ); - - HBufC* text = StringLoader::LoadLC( R_QTN_RCL_OPENING_WAIT_NOTE ); - iWaitNoteText.CreateL( *text ); - CleanupStack::PopAndDestroy( text ); - - iCallbackReqSender = CPbkxRclCbRSender::NewL(); - - iVisibleFields = new ( ELeave ) CPbkFieldArray; - - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::NewL -// --------------------------------------------------------------------------- -// -CPbkxRclResultInfoDlg* CPbkxRclResultInfoDlg::NewL( - TInt& aIndex, - CDesCArray* aArray, - MEikCommandObserver* aCommand, - MPbkxRclContactRetrieval* aContactRetrieval, - CPbkContactEngine& aContactEngine, - CPbkxRclActionServiceWrapper& aActionService, - TBool aContactSelectorEnabled, - TInt aActiveItemIndex ) - { - FUNC_LOG; - - CPbkxRclResultInfoDlg* self = new( ELeave ) CPbkxRclResultInfoDlg( - aIndex, - aArray, - aCommand, - aContactRetrieval, - aContactEngine, - aActionService, - aContactSelectorEnabled, - aActiveItemIndex ); - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::~CPbkxRclResultInfoDlg -// --------------------------------------------------------------------------- -// -CPbkxRclResultInfoDlg::~CPbkxRclResultInfoDlg() - { - FUNC_LOG; - ResetStatusPane(); - delete iCurrentContact; - iWaitNoteText.Close(); - delete iTitlePaneText; - delete iCallbackReqSender; - delete iVisibleFields; - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::DynInitMenuPaneL -// --------------------------------------------------------------------------- -// -void CPbkxRclResultInfoDlg::DynInitMenuPaneL( - TInt aResourceId, - CEikMenuPane* aMenuPane ) - { - FUNC_LOG; - - if ( aResourceId == R_RCL_RESULT_INFO_DIALOG_MENU_PANE ) - { - - if ( !iContactSelectorEnabled ) - { - aMenuPane->SetItemDimmed( ERclCmdAddAsRecipient, ETrue ); - - aMenuPane->SetItemDimmed( - ERclCmdCall, - !CallActionsAvailable() ); - - // send menu is always available, since business card can - // always be sent - } - else - { - aMenuPane->SetItemDimmed( ERclCmdCall, ETrue ); - aMenuPane->SetItemDimmed( ERclCmdSend, ETrue ); - } - - // talk menu is shown if we have PTT enabled - aMenuPane->SetItemDimmed( - ERclCmdTalk, - !iContactActionService.IsActionEnabled( KFscAtComCallPoc ) ); - - } - else if ( aResourceId == R_RCL_ADD_TO_CONTACTS_MENU_PANE ) - { - - aMenuPane->SetItemDimmed( - ERclCmdCreateNew, - !iContactActionService.IsActionEnabled( KFscAtManSaveAs ) ); - - } - else if ( aResourceId == R_RCL_CALL_MENU_PANE ) - { - - aMenuPane->SetItemDimmed( - ERclCmdVoiceCall, - !iContactActionService.IsActionEnabled( KFscAtComCallGSM ) ); - - aMenuPane->SetItemDimmed( - ERclCmdVideoCall, - !iContactActionService.IsActionEnabled( KFscAtComCallVideo ) ); - - aMenuPane->SetItemDimmed( - ERclCmdVoip, - !iContactActionService.IsActionEnabled( KFscAtComCallVoip ) ); - - } - else if ( aResourceId == R_RCL_TALK_MENU_PANE ) - { - // PTT settings available, no need to hide items - } - else if ( aResourceId == R_RCL_SEND_MENU_PANE ) - { - aMenuPane->SetItemDimmed( - ERclCmdSendMsg, - !iContactActionService.IsActionEnabled( KFscAtComSendMsg ) ); - - aMenuPane->SetItemDimmed( - ERclCmdSendEmail, - !iContactActionService.IsActionEnabled( KFscAtComSendEmail ) ); - - aMenuPane->SetItemDimmed( - ERclCmdSendMeetingReq, - !iContactActionService.IsActionEnabled( KFscAtComSendCalReq ) ); - - aMenuPane->SetItemDimmed( - ERclCmdSendAudioMsg, - !iContactActionService.IsActionEnabled( KFscAtComSendAudio ) ); - - } - else if ( aResourceId == R_RCL_CONTEXT_SEND_MENU_PANE ) - { - aMenuPane->SetItemDimmed( - ERclCmdSendMsg, - ( !( FocusOnPhoneNumberField() || FocusOnEmailAddressField() ) || - !iContactActionService.IsActionEnabled( KFscAtComSendMsg ) ) ); - - aMenuPane->SetItemDimmed( - ERclCmdSendEmail, - ( !FocusOnEmailAddressField() || - !iContactActionService.IsActionEnabled( KFscAtComSendEmail ) ) ); - - aMenuPane->SetItemDimmed( - ERclCmdSendMeetingReq, - ( !FocusOnEmailAddressField() || - !iContactActionService.IsActionEnabled( KFscAtComSendCalReq ) ) ); - - aMenuPane->SetItemDimmed( - ERclCmdSendAudioMsg, - ( !( FocusOnPhoneNumberField() || FocusOnEmailAddressField() ) || - !iContactActionService.IsActionEnabled(KFscAtComSendAudio ) ) ); - - } - else if ( aResourceId == R_RCL_RESULT_INFO_DIALOG_CONTEXT_MENU_PANE ) - { - if ( !iContactSelectorEnabled ) - { - aMenuPane->SetItemDimmed( ERclCmdAddAsRecipient, ETrue ); - - aMenuPane->SetItemDimmed( - ERclCmdCall, - !( FocusOnPhoneNumberField() || FocusOnVoipField() ) ); - - // send menu is always visible, because business card can always - // be sent - } - else - { - aMenuPane->SetItemDimmed( ERclCmdCall, ETrue ); - aMenuPane->SetItemDimmed( ERclCmdSend, ETrue ); - } - } - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::GetHelpContext -// --------------------------------------------------------------------------- -// -void CPbkxRclResultInfoDlg::GetHelpContext( TCoeHelpContext& aContext ) const - { - FUNC_LOG; - aContext.iMajor = TUid::Uid( KPbkxRemoteContactLookupServiceImplImpUid ); - aContext.iContext = KRLOOK_HLP_INFO_VIEW; - } - -// ---------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::HandleListBoxEventL() -// ---------------------------------------------------------------------------- -// -void CPbkxRclResultInfoDlg::HandleListBoxEventL( - CEikListBox* /* aListBox */, - TListBoxEvent aEventType ) - { - FUNC_LOG; - switch ( aEventType ) - { - case EEventEnterKeyPressed: - case EEventItemClicked: - case EEventItemActioned: - { - break; - } - - case EEventItemDoubleClicked: - { - // open context sensitive menu - iMenuBar->TryDisplayContextMenuBarL(); - break; - } - - default: - { - break; - } - } - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::OfferKeyEventL -// --------------------------------------------------------------------------- -// -TKeyResponse CPbkxRclResultInfoDlg::OfferKeyEventL( - const TKeyEvent& aKeyEvent, - TEventCode aType ) - { - FUNC_LOG; - - if ( iExit || aType != EEventKey ) - { - return EKeyWasConsumed; - } - - switch ( aKeyEvent.iCode ) - { - case EKeyOK: - { - // open context sensitive menu - iMenuBar->TryDisplayContextMenuBarL(); - } - break; - case EKeyUpArrow: // fall through, same functionality - case EKeyDownArrow: - { - CAknSelectionListDialog::OfferKeyEventL( aKeyEvent, aType ); - } - break; - case EKeyRightArrow: - { - TInt oldIndex = iActiveTabIndex; - iActiveTabIndex = ( iActiveTabIndex + 1 ) % iTabGroup->TabCount(); - - if ( FetchCurrentContactL() ) - { - UpdateDialogL(); - } - else - { - iActiveTabIndex = oldIndex; - } - } - break; - case EKeyLeftArrow: - { - TInt oldIndex = iActiveTabIndex; - if ( iActiveTabIndex > 0 ) - { - iActiveTabIndex--; - } - else - { - iActiveTabIndex = iTabGroup->TabCount() - 1; - } - - if ( FetchCurrentContactL() ) - { - UpdateDialogL(); - } - else - { - iActiveTabIndex = oldIndex; - } - } - break; - case EKeyEscape: - { - // exit application - iExit = ETrue; - ProcessCommandL( EAknCmdExit ); - } - break; - default: - break; - } - return EKeyWasConsumed; - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::OkToExitL -// --------------------------------------------------------------------------- -// -TBool CPbkxRclResultInfoDlg::OkToExitL( TInt aButtonId ) - { - FUNC_LOG; - if( aButtonId == EAknSoftkeyContextOptions ) - { - iMenuBar->TryDisplayContextMenuBarL(); - return EFalse; - } - else - { - return CAknDialog::OkToExitL( aButtonId ); - } - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::ExecuteLD -// --------------------------------------------------------------------------- -// -void CPbkxRclResultInfoDlg::ExecuteLD() - { - FUNC_LOG; - - // if current contact cannot be fetched, result info dialog is not opened - if ( !FetchCurrentContactL() ) - { - delete this; - return; - } - - PrepareLC( R_RCL_RESULT_INFO_DIALOG ); - - UpdateGraphics(); - UpdateColors(); - - iMenuBar->SetContextMenuTitleResourceId( - R_RCL_RESULT_INFO_DIALOG_CONTEXT_MENU_BAR ); - - SetupStatusPaneL(); - - CreateListBoxEntriesL(); - CAknSelectionListDialog::RunLD(); - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::Close -// --------------------------------------------------------------------------- -// -void CPbkxRclResultInfoDlg::Close() - { - FUNC_LOG; - // this will not leave, because TryExitL doesn't call leaving methods - // when EAknSoftkeyCancel is used - iExit = ETrue; - TRAP_IGNORE( TryExitL( EAknSoftkeyCancel ) ); // - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::SendCallbackRequestL -// --------------------------------------------------------------------------- -// -void CPbkxRclResultInfoDlg::SendCallbackRequestL() - { - FUNC_LOG; - iCallbackReqSender->SendCallbackRequestL( *iCurrentContact ); - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::SendBusinessCardL -// --------------------------------------------------------------------------- -// -void CPbkxRclResultInfoDlg::SendBusinessCardL() - { - FUNC_LOG; - CPbkxRclvCardSender* sender = CPbkxRclvCardSender::NewLC( iContactEngine ); - sender->SendvCardL( *iCurrentContact, *(iContactActionService.ContactConverter()) ); - CleanupStack::PopAndDestroy( sender ); - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::UpdateExistingContactL -// --------------------------------------------------------------------------- -// -HBufC* CPbkxRclResultInfoDlg::UpdateExistingContactL() - { - FUNC_LOG; - CPbkxRclContactUpdater* updater = CPbkxRclContactUpdater::NewLC( - iContactEngine ); - TPbkContactItemField& field = CurrentField(); - - HBufC* resultText = updater->UpdateContactL( field ); - CleanupStack::PopAndDestroy( updater ); - return resultText; - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::SetupStatusPaneL -// --------------------------------------------------------------------------- -// -void CPbkxRclResultInfoDlg::SetupStatusPaneL() - { - FUNC_LOG; - CAknAppUi* appUi = static_cast( CCoeEnv::Static()->AppUi() ); - CEikStatusPane* statusPane = appUi->StatusPane(); - iNaviPane = reinterpret_cast( - statusPane->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ); - iTitlePane = reinterpret_cast( - statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); - - const TDesC* titleText = iTitlePane->Text(); - iTitlePaneText = titleText->AllocL(); - - SetTitlePaneTextL(); - - SetupTabGroupL(); - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::ResetStatusPane -// --------------------------------------------------------------------------- -// -void CPbkxRclResultInfoDlg::ResetStatusPane() - { - FUNC_LOG; - // title pane may be null if dialog constructing failed - if ( iTitlePane != NULL ) - { - // ownership of iTitlePaneText is transferred to title pane - iTitlePane->SetText( iTitlePaneText ); - iTitlePaneText = NULL; - } - ResetTabGroup(); - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::SetupTabGroupL -// --------------------------------------------------------------------------- -// -void CPbkxRclResultInfoDlg::SetupTabGroupL() - { - FUNC_LOG; - TInt contactCount = iContactRetrieval->ContactCount(); - iNaviDecorator = iNaviPane->CreateTabGroupL(); - iTabGroup = reinterpret_cast( - iNaviDecorator->DecoratedControl() ); - - - CArrayFixFlat* array = - new ( ELeave ) CArrayFixFlat( KArrayGranularity ); - CleanupStack::PushL( array ); - - // add initial values - array->AppendL( 0 ); - array->AppendL( contactCount ); - - iTabGroup->SetTabFixedWidthL( KTabWidthWithOneTab ); - for ( TInt i = 0; i < contactCount; i++ ) - { - ( *array )[0] = i + 1; - HBufC* text = StringLoader::LoadLC( R_QTN_RCL_INFO_NAVI, *array ); - iTabGroup->AddTabL( i, *text ); - CleanupStack::PopAndDestroy( text ); - } - - CleanupStack::PopAndDestroy( array ); - iTabGroup->SetActiveTabById( iActiveTabIndex ); - - SetNaviIndicatorsL(); - - iNaviPane->PushL( *iNaviDecorator ); - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::SetNaviIndicatorsL -// --------------------------------------------------------------------------- -// -void CPbkxRclResultInfoDlg::SetNaviIndicatorsL() - { - FUNC_LOG; - if ( iNaviPane != NULL && iNaviDecorator != NULL && iTabGroup != NULL ) - { - TInt contactCount = iTabGroup->TabCount(); - if ( contactCount > 1 ) - { - iNaviDecorator->MakeScrollButtonVisible( ETrue ); - - iNaviDecorator->SetScrollButtonDimmed( - CAknNavigationDecorator::ERightButton, - EFalse); - - iNaviDecorator->SetScrollButtonDimmed( - CAknNavigationDecorator::ELeftButton, - EFalse); - - iNaviPane->PushL( *iNaviDecorator ); - } - } - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::SetTitlePaneTextL -// --------------------------------------------------------------------------- -// -void CPbkxRclResultInfoDlg::SetTitlePaneTextL() - { - FUNC_LOG; - - HBufC* firstName = PbkxRclUtils::FieldTextL( - iCurrentContact, - EPbkFieldIdFirstName ); - CleanupStack::PushL( firstName ); - - HBufC* lastName = PbkxRclUtils::FieldTextL( - iCurrentContact, - EPbkFieldIdLastName ); - CleanupStack::PushL( lastName ); - - RBuf name; - CleanupClosePushL( name ); - name.CreateL( firstName->Length() + lastName->Length() + 1 ); - name.Format( KNameFormat, firstName, lastName ); - - iTitlePane->SetTextL( name ); - - CleanupStack::PopAndDestroy( &name ); - CleanupStack::PopAndDestroy( lastName ); - CleanupStack::PopAndDestroy( firstName ); - - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::ResetTabGroup -// --------------------------------------------------------------------------- -// -void CPbkxRclResultInfoDlg::ResetTabGroup() - { - FUNC_LOG; - // navi pane and navi decorator may be null if dialog construction failed - if ( iNaviPane != NULL && iNaviDecorator != NULL ) - { - iNaviPane->Pop( iNaviDecorator ); - delete iNaviDecorator; - iNaviDecorator = NULL; - } - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::CreateListBoxEntriesL -// --------------------------------------------------------------------------- -// -void CPbkxRclResultInfoDlg::CreateListBoxEntriesL() - { - FUNC_LOG; - - iItems->Reset(); - iVisibleFields->Reset(); - - CPbkFieldArray& fieldArray = iCurrentContact->CardFields(); - TInt count = fieldArray.Count(); - - for ( TInt i = 0; i < count; i++ ) - { - - TPbkContactItemField field = fieldArray[i]; - - HBufC* text = PbkxRclUtils::FieldTextL( field ); - CleanupStack::PushL( text ); - - if ( text->Length() > 0 ) - { - iVisibleFields->AppendL( field ); - const TDesC& header = field.FieldInfo().FieldName(); - - RBuf entry; - CleanupClosePushL( entry ); - entry.CreateL( - header.Length() + text->Length() + - KExtraSpaceInListboxEntry ); - - entry.Format( KFieldFormat, &header, text ); - iItems->AppendL( entry ); - CleanupStack::PopAndDestroy( &entry ); - } - CleanupStack::PopAndDestroy( text ); - } - - CEikListBox* listBox = ListBox(); - - if ( count > 0 ) - { - // if there are items, set top item as selected - listBox->SetTopItemIndex( 0 ); - listBox->SetCurrentItemIndex( 0 ); - } - - listBox->HandleItemAdditionL(); - - // update contact action service - iContactActionService.SetCurrentContactL( - iCurrentContact ); - - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::FetchCurrentContactL -// --------------------------------------------------------------------------- -// -TBool CPbkxRclResultInfoDlg::FetchCurrentContactL() - { - FUNC_LOG; - CContactCard* currentCard = iContactRetrieval->RetrieveDetailsL( - iActiveTabIndex, - iWaitNoteText ); - - if ( currentCard != NULL ) - { - - delete iCurrentContact; - iCurrentContact = NULL; - - iCurrentContact = PbkxRclUtils::CreateContactItemL( - currentCard, - iContactEngine ); - - return ETrue; - } - else - { - return EFalse; - } - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::UpdateDialogL -// --------------------------------------------------------------------------- -// -void CPbkxRclResultInfoDlg::UpdateDialogL() - { - FUNC_LOG; - iContactRetrieval->SetSelectedContactL( iActiveTabIndex ); - CreateListBoxEntriesL(); - SetTitlePaneTextL(); - iTabGroup->SetActiveTabById( iActiveTabIndex ); - - // set navi indicators if needed - if ( iActiveTabIndex == 0 || iActiveTabIndex == iTabGroup->TabCount() - 1 ) - { - SetNaviIndicatorsL(); - } - - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::CallActionsAvailable -// --------------------------------------------------------------------------- -// -TBool CPbkxRclResultInfoDlg::CallActionsAvailable() const - { - FUNC_LOG; - return iContactActionService.IsActionEnabled( KFscAtComCallGSM ) || - iContactActionService.IsActionEnabled( KFscAtComCallVideo ) || - iContactActionService.IsActionEnabled( KFscAtComCallVoip ); - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::FocusOnPhoneNumberField -// --------------------------------------------------------------------------- -// -TBool CPbkxRclResultInfoDlg::FocusOnPhoneNumberField() const - { - FUNC_LOG; - TPbkContactItemField& field = CurrentField(); - return field.FieldInfo().IsPhoneNumberField(); - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::FocusOnEmailAddressField -// --------------------------------------------------------------------------- -// -TBool CPbkxRclResultInfoDlg::FocusOnEmailAddressField() const - { - FUNC_LOG; - TPbkContactItemField& field = CurrentField(); - return field.FieldInfo().IsEmailField(); - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::FocusOnVoipField -// --------------------------------------------------------------------------- -// -TBool CPbkxRclResultInfoDlg::FocusOnVoipField() const - { - FUNC_LOG; - TPbkContactItemField& field = CurrentField(); - return field.FieldInfo().FieldId() == EPbkFieldIdVOIP; - } - -// --------------------------------------------------------------------------- -// CPbkxRclResultInfoDlg::CurrentField -// --------------------------------------------------------------------------- -// -TPbkContactItemField& CPbkxRclResultInfoDlg::CurrentField() const - { - FUNC_LOG; - TInt curIndex = ListBox()->CurrentItemIndex(); - return ( *iVisibleFields )[curIndex]; - } -