diff -r a3a1ae9acec6 -r da5135c61bad meetingrequest/mrgui/mrfieldbuilderpluginextension/src/cesmrresponsefield.cpp --- a/meetingrequest/mrgui/mrfieldbuilderpluginextension/src/cesmrresponsefield.cpp Mon Mar 15 12:39:10 2010 +0200 +++ b/meetingrequest/mrgui/mrfieldbuilderpluginextension/src/cesmrresponsefield.cpp Wed Mar 31 21:08:33 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 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" @@ -14,34 +14,28 @@ * Description: Meeting Request viewer response field implementation * */ - #include "cesmrresponsefield.h" #include "cesmrresponseitem.h" #include "mesmrresponseobserver.h" #include "mesmrmeetingrequestentry.h" #include "cesmrconflictpopup.h" -#include "cesmrlayoutmgr.h" #include "nmrlayoutmanager.h" #include "esmrhelper.h" -#include "cfsmailbox.h" +#include "cfsmailcommon.h" +#include "cesmrlistquery.h" #include -#include -#include +#include #include // DEBUG #include "emailtrace.h" /// Unnamed namespace for local definitions -namespace // codescanner::namespace - { - const TInt KSelectionTopic(0); - const TInt KOnlyTwoLines( 2 ); - const TInt KFirstCheckboxRow( 2 ); - const TInt KFirstControlItemIndex( 1 ); - const TInt KTopicFieldCount( 1 ); - const TInt KFirstSelectedItem( 1 ); +namespace + { + const TInt KConflictItemIndex( 0 ); + const TInt KExtraInfoItemIndex( 1 ); //"Request is out of date" "Please respond", ect } // namespace // ----------------------------------------------------------------------------- @@ -76,8 +70,8 @@ FUNC_LOG; iResponseItemArray.ResetAndDestroy(); delete iConfPopup; - - if( iESMRStaticAccessed ) + + if( iESMRStaticAccessed ) { iESMRStatic.Close(); } @@ -88,8 +82,8 @@ // ----------------------------------------------------------------------------- // CESMRResponseField::CESMRResponseField(MESMRResponseObserver* aResponseObserver) -: iResponseObserver(aResponseObserver), iSelectionIndex( KFirstSelectedItem ), - iESMRStaticAccessed(EFalse) +: iResponseObserver(aResponseObserver), iSelectionIndex( 0 ), + iESMRStaticAccessed(EFalse), iConflicted(EFalse) { FUNC_LOG; SetFieldId( EESMRFieldResponseArea ); @@ -102,38 +96,12 @@ void CESMRResponseField::ConstructL() { FUNC_LOG; - // Construct the topic for response area - // Topic line is without icon and text. Text is set later + + // Add pls resopond item to this field. CESMRResponseItem* responseItem = CESMRResponseItem::NewLC( EESMRCmdUndefined, KNullDesC, EFalse ); iResponseItemArray.AppendL( responseItem ); CleanupStack::Pop( responseItem ); - - // Create tick boxes only in non touch environment - if ( !AknLayoutUtils::PenEnabled() ) - { - // Constuct the first item (Accept) - HBufC* stringholder = StringLoader::LoadLC( R_QTN_MEET_REQ_RESPONSE_ACCEPT , - iEikonEnv ); - responseItem = CESMRResponseItem::NewLC( EESMRCmdAcceptMR, *stringholder, ETrue ); - iResponseItemArray.AppendL( responseItem ); - CleanupStack::Pop( responseItem ); - CleanupStack::PopAndDestroy( stringholder ); - - // Constuct the second item (Tentative) - stringholder = StringLoader::LoadLC( R_QTN_MEET_REQ_RESPONSE_TENTATIVE , iEikonEnv ); - responseItem = CESMRResponseItem::NewLC( EESMRCmdTentativeMR, *stringholder, ETrue ); - iResponseItemArray.AppendL( responseItem ); - CleanupStack::Pop( responseItem ); - CleanupStack::PopAndDestroy( stringholder ); - - // Constuct the third item (Decline) - stringholder = StringLoader::LoadLC( R_QTN_MEET_REQ_RESPONSE_DECLINE , iEikonEnv ); - responseItem = CESMRResponseItem::NewLC( EESMRCmdDeclineMR, *stringholder, ETrue ); - iResponseItemArray.AppendL( responseItem ); - CleanupStack::Pop( responseItem ); - CleanupStack::PopAndDestroy( stringholder ); - } } // ----------------------------------------------------------------------------- @@ -143,14 +111,10 @@ void CESMRResponseField::InitializeL() { FUNC_LOG; - TAknLayoutText layout = - NMRLayoutManager::GetLayoutText( - Rect(), NMRLayoutManager::EMRTextLayoutCheckboxEditor ); + TAknLayoutText layout = + NMRLayoutManager::GetLayoutText( + Rect(), NMRLayoutManager::EMRTextLayoutCheckboxEditor ); SetFont( layout.Font() ); - if( iSelectionIndex < iResponseItemArray.Count() ) - { - iResponseItemArray[iSelectionIndex]->SetHighlight(); - } } // ----------------------------------------------------------------------------- @@ -174,64 +138,35 @@ } // ----------------------------------------------------------------------------- -// CESMRResponseField::Draw -// ----------------------------------------------------------------------------- -// -void CESMRResponseField::Draw( - const TRect& /*aRect*/ ) const - { - FUNC_LOG; - } - -// ----------------------------------------------------------------------------- // CESMRResponseField::SizeChanged // ----------------------------------------------------------------------------- // void CESMRResponseField::SizeChanged() { FUNC_LOG; - TRect rect( Rect() ); - - // Topic field - TAknLayoutRect topicLayoutRect = - NMRLayoutManager::GetFieldRowLayoutRect( rect, 1 ); - AknLayoutUtils::LayoutControl( - ControlItem( KSelectionTopic ), - rect, - topicLayoutRect.Color().Value(), - topicLayoutRect.Rect().iTl.iX, - topicLayoutRect.Rect().iTl.iY, - topicLayoutRect.Rect().iBr.iX, - topicLayoutRect.Rect().iBr.iY, - topicLayoutRect.Rect().Width(), - topicLayoutRect.Rect().Height()); - - // Items - // Remove one for the topic field - TInt count( iResponseItemArray.Count() - KTopicFieldCount ); - TInt row( KFirstCheckboxRow ); - TInt controlIndex( KFirstControlItemIndex ); + TInt count( iResponseItemArray.Count() ); TRect parentRect( Rect() ); - for( TInt i = 0; i < count; ++i ) - { + TRect rect; + for( TInt i = 1; i <= count; ++i ) + { TAknLayoutRect choiceLayoutRect = - NMRLayoutManager::GetFieldRowLayoutRect( parentRect, row + i ); + NMRLayoutManager::GetFieldRowLayoutRect( parentRect, i ); rect = parentRect; // Move the row down then it will be drawn to correct position. // controlIndex+1 tells the fields index. TInt movement = choiceLayoutRect.Rect().Height(); - rect.Move( 0, movement * ( controlIndex + i ) ); - + rect.Move( 0, movement * ( i - 1 ) ); + AknLayoutUtils::LayoutControl( - ControlItem( controlIndex + i ), + ControlItem( i - 1 ), rect, - choiceLayoutRect.Color().Value(), - choiceLayoutRect.Rect().iTl.iX, - choiceLayoutRect.Rect().iTl.iY, - choiceLayoutRect.Rect().iBr.iX, + choiceLayoutRect.Color().Value(), + choiceLayoutRect.Rect().iTl.iX, + 0, + choiceLayoutRect.Rect().iBr.iX, choiceLayoutRect.Rect().iBr.iY, - choiceLayoutRect.Rect().Width(), - choiceLayoutRect.Rect().Height() ); + choiceLayoutRect.Rect().Width(), + choiceLayoutRect.Rect().Height() ); } } @@ -247,7 +182,7 @@ TAknLayoutRect row1LayoutRect( NMRLayoutManager::GetFieldRowLayoutRect( rect, 1 ) ); rect = row1LayoutRect.Rect(); - + TInt rowCount( iResponseItemArray.Count() ); TInt height( rect.Height() * rowCount ); return TSize( Parent()->Size().iWidth, height ); @@ -261,30 +196,27 @@ TEventCode aType ) { FUNC_LOG; - TKeyResponse consumed( EKeyWasNotConsumed ); + TKeyResponse consumed( EKeyWasNotConsumed ); - if ( aType == EEventKey && iSelectionIndex < iResponseItemArray.Count() ) + if ( aType == EEventKey ) { - if ( aKeyEvent.iScanCode == EStdKeyUpArrow && iSelectionIndex > 1) + if ( iConflicted ) { - iResponseItemArray[iSelectionIndex]->RemoveHighlight(); - iSelectionIndex--; - iResponseItemArray[iSelectionIndex]->SetHighlight(); - consumed = EKeyWasConsumed; - } - if ( aKeyEvent.iScanCode == EStdKeyDownArrow && - iSelectionIndex < iResponseItemArray.Count() - 1 ) - { - iResponseItemArray[iSelectionIndex]->RemoveHighlight(); - iSelectionIndex++; - iResponseItemArray[iSelectionIndex]->SetHighlight(); - consumed = EKeyWasConsumed; - } - // If ok button is pressed and highlight is not in the topic item - if ( aKeyEvent.iScanCode == EStdKeyDevice3 - && ItemSelectedL() ) - { - consumed = EKeyWasConsumed; + if ( aKeyEvent.iScanCode == EStdKeyUpArrow && iSelectionIndex > 0 ) + { + iResponseItemArray[KExtraInfoItemIndex]->RemoveHighlight(); + iResponseItemArray[KConflictItemIndex]->SetHighlight(); + iSelectionIndex = KConflictItemIndex; + consumed = EKeyWasConsumed; + } + + if ( aKeyEvent.iScanCode == EStdKeyDownArrow && iSelectionIndex < iResponseItemArray.Count()-1 ) + { + iResponseItemArray[KConflictItemIndex]->RemoveHighlight(); + iResponseItemArray[KExtraInfoItemIndex]->SetHighlight(); + iSelectionIndex = KExtraInfoItemIndex; + consumed = EKeyWasConsumed; + } } } @@ -303,16 +235,27 @@ void CESMRResponseField::FocusChanged( TDrawNow /*aDrawNow*/ ) { FUNC_LOG; + if ( iConflicted && !iPointEvent ) + { + // set the default value for iSelectionIndex, depend on iPreItemIndex + if ( PreItemIndex() <= CurrentItemIndex() ) + { + iSelectionIndex = 0; + } + else + { + iSelectionIndex = 1; + } + } // Focus received if ( IsFocused() && iSelectionIndex < iResponseItemArray.Count() ) { - // By default, highlight the first item - iResponseItemArray[iSelectionIndex]->SetHighlight(); - DrawDeferred(); - if (iConfPopup) - { - iConfPopup->ShowPopup(); - } + if( !iPointEvent ) + { + // By default, highlight the first item + iResponseItemArray[iSelectionIndex]->SetHighlight(); + DrawDeferred(); + } } else // Focus lost remove highlight { @@ -321,6 +264,7 @@ iResponseItemArray[i]->RemoveHighlight(); } } + iPointEvent = EFalse; } // ----------------------------------------------------------------------------- @@ -330,7 +274,8 @@ void CESMRResponseField::InternalizeL( MESMRCalEntry& aEntry ) { FUNC_LOG; - + iNormalResponse = EFalse; + iRemoveResponse = EFalse; MESMRMeetingRequestEntry* entry = NULL; if ( MESMRCalEntry::EESMRCalEntryMeetingRequest == aEntry.Type() ) { @@ -341,6 +286,33 @@ User::Leave( KErrNotSupported ); } + // Judge if there is any conflicts with other existed event. + iConflicted = entry->Conflicts(); + if ( iConflicted ) + { + // Construct the item to show conflicts info, and insert it to the beginning of array + CESMRResponseItem* conflictItem = + CESMRResponseItem::NewLC( EESMRCmdUndefined, KNullDesC, EFalse ); + iResponseItemArray.Insert( conflictItem, 0 ); + CleanupStack::Pop( conflictItem ); + + HBufC* conflictString; + conflictString = StringLoader::LoadLC( + R_QTN_MEET_REQ_RESPONSE_CONFLICT , iEikonEnv ); + // Show prompt conflict dialog + iConfPopup = CESMRConflictPopup::NewL(aEntry); + + if ( iResponseItemArray.Count() > 0 ) + { + iResponseItemArray[KConflictItemIndex]->SetUnderlineL( ETrue ); + iResponseItemArray[KConflictItemIndex]->SetTextL( conflictString->Des() ); + } + CleanupStack::PopAndDestroy( conflictString ); + } + + + // Set other info, for example, "please respond", "Request is out of date", + // "Meeting has been canceled" ...... MESMRMeetingRequestEntry::TESMREntryInfo attendeeInfo = entry->EntryAttendeeInfoL(); HBufC* stringholder; switch( attendeeInfo ) @@ -349,6 +321,10 @@ { stringholder = StringLoader::LoadLC( R_QTN_MEET_REQ_RESPONSE_OUT_OF_DATE , iEikonEnv ); + if( entry->IsOpenedFromMail() ) + { + iRemoveResponse = ETrue; + } break; } @@ -357,6 +333,10 @@ stringholder = StringLoader::LoadLC( R_QTN_MEET_REQ_RESPONSE_CANCELLED , iEikonEnv ); HandleCancelledEventItemsL( aEntry ); + if( entry->IsOpenedFromMail() ) + { + iRemoveResponse = ETrue; + } break; } @@ -364,6 +344,7 @@ { stringholder = StringLoader::LoadLC( R_QTN_MEET_REQ_RESPOND_ACCEPTED , iEikonEnv ); + iNormalResponse = ETrue; break; } @@ -371,6 +352,7 @@ { stringholder = StringLoader::LoadLC( R_QTN_MEET_REQ_RESPOND_TENTATIVE , iEikonEnv ); + iNormalResponse = ETrue; break; } @@ -378,6 +360,7 @@ { stringholder = StringLoader::LoadLC( R_QTN_MEET_REQ_RESPOND_DECLINED , iEikonEnv ); + iNormalResponse = ETrue; break; } @@ -385,15 +368,10 @@ { stringholder = StringLoader::LoadLC( R_QTN_MEET_REQ_RESPONSE_OCCURS_PAST , iEikonEnv ); - break; - } - - case MESMRMeetingRequestEntry::EESMREntryInfoConflicts: - { - stringholder = StringLoader::LoadLC( - R_QTN_MEET_REQ_RESPONSE_CONFLICT , iEikonEnv ); - iConfPopup = CESMRConflictPopup::NewL(aEntry); - iConfPopup->ShowPopup(); + if( entry->IsOpenedFromMail() ) + { + iRemoveResponse = ETrue; + } break; } @@ -401,22 +379,27 @@ { stringholder = StringLoader::LoadLC( R_QTN_MEET_REQ_RESPONSE_PLEASE_RESPOND , iEikonEnv ); + iNormalResponse = ETrue; break; } default: - stringholder = StringLoader::LoadLC( - R_QTN_MEET_REQ_RESPONSE_PLEASE_RESPOND , iEikonEnv ); + stringholder = StringLoader::LoadLC( + R_QTN_MEET_REQ_RESPONSE_PLEASE_RESPOND , iEikonEnv ); + iNormalResponse = ETrue; break; } - iResponseItemArray[0]->SetTextL( stringholder->Des() ); - // Check do we need to expand because of the long topic text ( two lines max ) - if ( iResponseItemArray[0]->ItemTextLineCount() > 1 || - iResponseItemArray.Count() == KOnlyTwoLines ) + TInt repondItemIndex( 0 ); + if ( iConflicted && iResponseItemArray.Count() == 2 ) { - SizeChanged(); + repondItemIndex = 1; } + + iResponseItemArray[repondItemIndex]->SetUnderlineL( ETrue ); + iResponseItemArray[repondItemIndex]->SetTextL( stringholder->Des() ); + + SizeChanged(); CleanupStack::PopAndDestroy( stringholder ); } @@ -438,7 +421,7 @@ { FUNC_LOG; iFont = aFont; - // Set font for the response items (Tpoic, Accept, Tentative, Decline ) + // Set font for the response items (conflict and extrainfo item ) TInt itemCount = iResponseItemArray.Count(); for( TInt i = 0; i < itemCount; i++ ) { @@ -447,23 +430,6 @@ } // ----------------------------------------------------------------------------- -// CESMRResponseField::SetLayoutManager -// ----------------------------------------------------------------------------- -// -void CESMRResponseField::SetLayoutManager( CESMRLayoutManager* aLayout ) - { - FUNC_LOG; - iLayout = aLayout; - - // Set layoutmanager for the response items - TInt itemCount = iResponseItemArray.Count(); - for( TInt i = 0; i < itemCount; i++ ) - { - iResponseItemArray[i]->SetLayoutManager( aLayout ); - } - } - -// ----------------------------------------------------------------------------- // CESMRResponseField::ItemSelectedL // ----------------------------------------------------------------------------- // @@ -471,37 +437,68 @@ { FUNC_LOG; TBool selected( EFalse ); - - if ( iSelectionIndex > KSelectionTopic ) + TInt ret( KErrCancel ); + + if ( iConflicted ) { - if( iSelectionIndex < iResponseItemArray.Count() ) + if ( iSelectionIndex == 0 ) { - iResponseItemArray[iSelectionIndex]->ChangeIconL( ETrue ); - } - // Redraw to enable new checked icon in the screen - DrawDeferred(); - - TBool response( EFalse ); - - TInt cmd( 0 ); - if( iSelectionIndex < iResponseItemArray.Count() ) - { - cmd = static_cast< TInt >( iResponseItemArray[iSelectionIndex]->CommandId() ); - } - response = iResponseObserver->Response( cmd ); - - if ( !response ) - { - // Cancel was selected, update the icon - if( iSelectionIndex < iResponseItemArray.Count() ) + if ( iConfPopup ) { - iResponseItemArray[iSelectionIndex]->ChangeIconL( EFalse ); + iConfPopup->ShowPopup(); } } - - selected = ETrue; + + if ( KExtraInfoItemIndex == iSelectionIndex ) + { + if ( iNormalResponse ) + { + // Try to send response + CESMRListQuery* query = + CESMRListQuery::NewL( CESMRListQuery::EESMRNormalResponseQuery ); + CleanupStack::PushL( query ); + ret = query->ExecuteLD(); + CleanupStack::Pop( query ); + } + if ( iRemoveResponse ) + { + CESMRListQuery* query = + CESMRListQuery::NewL( CESMRListQuery::EESMRRemoveResponseQuery ); + CleanupStack::PushL( query ); + ret = query->ExecuteLD(); + CleanupStack::Pop( query ); + } + } } - + else + { + if ( KConflictItemIndex == iSelectionIndex ) + { + if ( iNormalResponse ) + { + // Try to send response + CESMRListQuery* query = + CESMRListQuery::NewL( CESMRListQuery::EESMRNormalResponseQuery ); + CleanupStack::PushL( query ); + ret = query->ExecuteLD(); + CleanupStack::Pop( query ); + } + if ( iRemoveResponse ) + { + CESMRListQuery* query = + CESMRListQuery::NewL( CESMRListQuery::EESMRRemoveResponseQuery ); + CleanupStack::PushL( query ); + ret = query->ExecuteLD(); + CleanupStack::Pop( query ); + } + } + } + + if ( KErrCancel != ret ) + { + NotifyEventAsyncL( ret ); + } + return selected; } @@ -512,59 +509,33 @@ void CESMRResponseField::HandleCancelledEventItemsL( MESMRCalEntry& aEntry ) { FUNC_LOG; - // Remove all other but title items from response array. Only 'Remove from Cal' - // should be shown. - TInt count = iResponseItemArray.Count(); - for ( TInt i = count - 1; i > 0; --i ) - { - CESMRResponseItem* item = iResponseItemArray[i]; - iResponseItemArray.Remove( i ); - delete item; - item = NULL; - } - CCalEntry& entry = aEntry.Entry(); CCalUser* calUser = entry.PhoneOwnerL(); TPtrC addr = ESMRHelper::AddressWithoutMailtoPrefix( calUser->Address() ); - + iESMRStatic.ConnectL(); iESMRStaticAccessed = ETrue; - - if( iESMRStatic.MailBoxL( addr ).HasCapability( - EFSMBoxCapaRemoveFromCalendar ) && - aEntry.IsStoredL() ) - { - // Construct the 'Remove from Calendar' item - HBufC* stringholder = StringLoader::LoadLC( - R_QTN_MEET_REQ_RESPONSE_REMOVE_CALENDAR_EVENT, iEikonEnv ); - CESMRResponseItem* responseItem = - CESMRResponseItem::NewL( EESMRCmdRemoveFromCalendar, *stringholder, ETrue ); - CleanupStack::PopAndDestroy( stringholder ); - CleanupStack::PushL( responseItem ); - // Set layout manager and font for the item - responseItem->SetLayoutManager( iLayout ); - responseItem->SetFont( iFont ); - responseItem->SetHighlight(); - User::LeaveIfError( iResponseItemArray.Append( responseItem ) ); - CleanupStack::Pop( responseItem ); - } } // ----------------------------------------------------------------------------- // CESMRResponseField::ExecuteGenericCommandL // ----------------------------------------------------------------------------- // -void CESMRResponseField::ExecuteGenericCommandL( TInt aCommand ) +TBool CESMRResponseField::ExecuteGenericCommandL( TInt aCommand ) { FUNC_LOG; + TBool isUsed( EFalse ); if ( aCommand == EAknSoftkeySelect ) { ItemSelectedL(); + isUsed = ETrue; } else { - CESMRField::ExecuteGenericCommandL( aCommand ); + isUsed = CESMRField::ExecuteGenericCommandL( aCommand ); } + + return isUsed; } // ----------------------------------------------------------------------------- @@ -575,7 +546,7 @@ { FUNC_LOG; CESMRField::SetOutlineFocusL( aFocus ); - + if ( aFocus ) { SetMiddleSoftKeyVisible( ETrue ); @@ -583,6 +554,126 @@ } // ----------------------------------------------------------------------------- +// CESMRResponseField::HandleSingletapEventL +// ----------------------------------------------------------------------------- +// +TBool CESMRResponseField::HandleSingletapEventL( const TPoint& aPosition ) + { + FUNC_LOG; + + TBool handled( EFalse ); + if( !iLongTapEventConsumed ) + { + handled = HandleTapEventL( aPosition ); + } + iLongTapEventConsumed = EFalse; + + return handled; + } + +// --------------------------------------------------------------------------- +// CESMRResponseField::HandleLongtapEventL +// --------------------------------------------------------------------------- +// +void CESMRResponseField::HandleLongtapEventL( const TPoint& aPosition ) + { + FUNC_LOG; + HandleTapEventL( aPosition ); + } + +// --------------------------------------------------------------------------- +// CESMRResponseField::HandletapEventL +// --------------------------------------------------------------------------- +// +TBool CESMRResponseField::HandleTapEventL( const TPoint& aPosition ) + { + TBool handled = EFalse; + TInt ret = KErrCancel; + + if ( Rect().Contains( aPosition ) ) + { + if ( iConflicted ) + { + TRect conflictItemRect = iResponseItemArray[KConflictItemIndex]->Rect(); + if ( conflictItemRect.Contains( aPosition ) ) + { + iResponseItemArray[KExtraInfoItemIndex]->RemoveHighlight(); + iResponseItemArray[KConflictItemIndex]->SetHighlight(); + iSelectionIndex = KConflictItemIndex; + if ( iConfPopup ) + { + iLongTapEventConsumed = ETrue; + iConfPopup->ShowPopup(); + } + } + else + { + iResponseItemArray[KConflictItemIndex]->RemoveHighlight(); + iResponseItemArray[KExtraInfoItemIndex]->SetHighlight(); + iSelectionIndex = KExtraInfoItemIndex; + DrawDeferred(); + if ( iNormalResponse ) + { + CESMRListQuery* query = + CESMRListQuery::NewL( CESMRListQuery::EESMRNormalResponseQuery ); + CleanupStack::PushL( query ); + // Use this flag to avoid the same event be handled by + // HandleSingletapEventL() when HandleLongtapEventL(). + iLongTapEventConsumed = ETrue; + ret = query->ExecuteLD(); + CleanupStack::Pop( query ); + } + if ( iRemoveResponse ) + { + CESMRListQuery* query = + CESMRListQuery::NewL( CESMRListQuery::EESMRRemoveResponseQuery ); + CleanupStack::PushL( query ); + iLongTapEventConsumed = ETrue; + ret = query->ExecuteLD(); + CleanupStack::Pop( query ); + } + } + } + else + { + iResponseItemArray[0]->SetHighlight(); + if ( iNormalResponse ) + { + CESMRListQuery* query = + CESMRListQuery::NewL( CESMRListQuery::EESMRNormalResponseQuery ); + CleanupStack::PushL( query ); + iLongTapEventConsumed = ETrue; + ret = query->ExecuteLD(); + CleanupStack::Pop( query ); + } + + if ( iRemoveResponse ) + { + CESMRListQuery* query = + CESMRListQuery::NewL( CESMRListQuery::EESMRRemoveResponseQuery ); + CleanupStack::PushL( query ); + iLongTapEventConsumed = ETrue; + ret = query->ExecuteLD(); + CleanupStack::Pop( query ); + } + } + + DrawDeferred(); + + handled = ETrue; + iPointEvent = ETrue; + + if ( KErrCancel != ret ) + { + NotifyEventAsyncL( ret ); + } + + } + + return handled; + } + +// ----------------------------------------------------------------------------- // CESMRResponseField::ControlItem // ----------------------------------------------------------------------------- // @@ -593,7 +684,7 @@ { control = static_cast( iResponseItemArray[aIndex] ); } - + return control; }