--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/mail/ViewerSrc/cmsgmailviewerfinditemhandler.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,245 @@
+/*
+* Copyright (c) 2006 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: Handles CItemFinder and CFindItemMenu for mail viewer.
+*
+*/
+
+#include "MailLog.h"
+#include <MsgMailViewer.rsg>
+#include "msgmailviewer.hrh"
+#include "cmsgmailviewerfinditemhandler.h"
+#include "cmsgmailviewercontactmatcher.h"
+#include <AiwContactAssignDataTypes.h> // aiw
+#include <AiwServiceHandler.h> // aiw
+#include <finditem.hrh>
+#include <FindItemmenu.rsg>
+#include <finditemmenu.h>
+#include <finditemdialog.h>
+
+// LOCAL CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+//
+
+// ---------------------------------------------------------------------------
+// CMsgMailViewerFindItemHandler::NewL
+// ---------------------------------------------------------------------------
+//
+CMsgMailViewerFindItemHandler* CMsgMailViewerFindItemHandler::NewL(
+ CItemFinder* aItemFinder )
+ {
+ CMsgMailViewerFindItemHandler* self = new(
+ ELeave ) CMsgMailViewerFindItemHandler( aItemFinder );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CMsgMailViewerFindItemHandler
+// ---------------------------------------------------------------------------
+//
+CMsgMailViewerFindItemHandler::CMsgMailViewerFindItemHandler(
+ CItemFinder* aItemFinder )
+ : iFindMode( CItemFinder::ENoneSelected ),
+ iItemFinder( aItemFinder )
+ {
+ }
+
+// ------------------------------------------------------------------------------
+// CMsgMailViewerFindItemHandler::~CMsgMailViewerFindItemHandler()
+// Destructor
+// Frees reserved resources
+// ------------------------------------------------------------------------------
+//
+CMsgMailViewerFindItemHandler::~CMsgMailViewerFindItemHandler()
+ {
+ LOG("~CMsgMailViewerFindItemHandler destructor");
+ delete iFindItemMenu;
+ LOG("~CMsgMailViewerFindItemHandler destructor end");
+ }
+
+
+// ------------------------------------------------------------------------------
+// CMsgMailViewerFindItemHandler::ConstructL()
+// Symbian OS constructor
+// ------------------------------------------------------------------------------
+//
+void CMsgMailViewerFindItemHandler::ConstructL()
+ {
+ LOG("CMsgMailViewerFindItemHandler::ConstructL");
+ SetFindModeL( iFindMode ); // make sure that finder is really in initial mode
+ iFindItemMenu = CFindItemMenu::NewL( EMsgMailViewerCmdFindItem );
+ iFindItemMenu->AttachItemFinderMenuL( R_MSGMAILVIEWER_OPTIONS_MENU2 );
+ iFindItemMenu->SetSenderDescriptorType( CItemFinder::EEmailAddress );
+#if defined(__VOIP) && defined(RD_VOIP_REL_2_2)
+ //hide call menu
+ iFindItemMenu->SetMenuItemVisibility( CFindItemMenu::ECallItem, EFalse );
+#endif // __VOIP && RD_VOIP_REL_2_2
+ LOG("CMsgMailViewerFindItemHandler::ConstructL -> End");
+ }
+
+// ------------------------------------------------------------------------------
+// CMsgMailViewerFindItemHandler::::DynInitMenuPaneL()
+// ------------------------------------------------------------------------------
+//
+void CMsgMailViewerFindItemHandler::DynInitMenuPaneL(
+ TInt aResourceId,
+ CEikMenuPane* aMenuPane,
+ const TDesC& aAddress,
+ const TDesC& aName,
+ TMsgControlId aFocusedControl )
+ {
+#if defined(__VOIP) && defined(RD_VOIP_REL_2_2)
+ if ( aFocusedControl == EMsgComponentIdBody )
+ {
+ //set call menu visible
+ iFindItemMenu->SetMenuItemVisibility( CFindItemMenu::ECallItem, ETrue );
+ }
+ else
+ {
+ //hide call menu
+ iFindItemMenu->SetMenuItemVisibility( CFindItemMenu::ECallItem, EFalse );
+ }
+#endif // __VOIP && RD_VOIP_REL_2_2
+
+ if ( aResourceId == R_MSGMAILVIEWER_OPTIONS_MENU2 ||
+ aResourceId == R_MSGMAILVIEWER_FINDITEM_MENU)
+ {
+ // If body is not focused, then we must not give CItemFinder
+ // to Find Item -> that way it shows options applicable
+ // for the e-mail address given in aAddress
+ CItemFinder* itemFinder = NULL;
+ if ( aFocusedControl == EMsgComponentIdBody )
+ {
+ itemFinder = iItemFinder;
+ }
+
+ // If FindMode is ENoneSelected(=find deactivated) give empty address
+ // string for iFindItemMenu
+ const TDesC& address( FindMode() == CItemFinder::ENoneSelected ?
+ KNullDesC : aAddress );
+
+ TBool isContextMenu( aResourceId == R_MSGMAILVIEWER_FINDITEM_MENU ?
+ ETrue : EFalse );
+
+ TInt index( isContextMenu ?
+ EFindItemContextMenuPlaceHolder :
+ EFindItemMenuPlaceHolder );
+
+ // although method names here refer to "sender", the same functionality
+ // applies to any focused address
+ iFindItemMenu->SetSenderHighlightStatus(
+ IsAddressControl( aFocusedControl ) );
+ const TDesC& displayText( aName.Length() > 0 ? aName : aAddress );
+ iFindItemMenu->SetSenderDisplayText( displayText );
+ iFindItemMenu->AddItemFindMenuL( itemFinder,
+ aMenuPane,
+ index,
+ address,
+ EFalse,
+ isContextMenu );
+ }
+ else
+ {
+ // all unknown menu panes should be given to UpdateItemFinderMenuL
+ iFindItemMenu->UpdateItemFinderMenuL( aResourceId, aMenuPane );
+ }
+ }
+
+TBool CMsgMailViewerFindItemHandler::IsAddressControl(
+ TMsgControlId aFocusedControl ) const
+ {
+ return ( aFocusedControl == EMsgComponentIdTo ||
+ aFocusedControl == EMsgComponentIdFrom ||
+ aFocusedControl == EMsgComponentIdCc ||
+ aFocusedControl == EMsgComponentIdBcc );
+ }
+
+// ------------------------------------------------------------------------------
+// CMsgMailViewerFindItemHandler::SelectionType()
+// ------------------------------------------------------------------------------
+//
+CItemFinder::TItemType
+CMsgMailViewerFindItemHandler::SelectionType( TBool aIsFocused ) const
+ {
+ CItemFinder::TItemType itemType( CItemFinder::ENoneSelected );
+ if ( iItemFinder && aIsFocused )
+ {
+ itemType = iItemFinder->CurrentItemExt().iItemType;
+ }
+ return itemType;
+ }
+
+// ------------------------------------------------------------------------------
+// CMsgMailViewerFindItemHandler::SelectionText()
+// ------------------------------------------------------------------------------
+//
+const TDesC& CMsgMailViewerFindItemHandler::SelectionText(
+ TBool aIsFocused ) const
+ {
+ if ( SelectionType( aIsFocused ) == CItemFinder::ENoneSelected )
+ {
+ return KNullDesC;
+ }
+ else
+ {
+ return *( iItemFinder->CurrentItemExt().iItemDescriptor );
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CMsgMailViewerFindItemHandler::SetFindModeL()
+// ------------------------------------------------------------------------------
+//
+void CMsgMailViewerFindItemHandler::SetFindModeL( TInt aFindFlags )
+ {
+ if ( iItemFinder )
+ {
+ iItemFinder->SetFindModeL( aFindFlags );
+ iFindMode = aFindFlags;
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CMsgMailViewerFindItemHandler::FindMode()
+// ------------------------------------------------------------------------------
+//
+TInt CMsgMailViewerFindItemHandler::FindMode() const
+ {
+ return iFindMode;
+ }
+
+// ------------------------------------------------------------------------------
+// CMsgMailViewerFindItemHandler::CanHandleCommand()
+// ------------------------------------------------------------------------------
+//
+TBool CMsgMailViewerFindItemHandler::CanHandleCommand( TInt aCommand ) const
+ {
+ TBool returnValue = EFalse;
+ TRAP_IGNORE( returnValue = iFindItemMenu->CommandIsValidL( aCommand ) );
+ return returnValue;
+ }
+
+// ------------------------------------------------------------------------------
+// CMsgMailViewerFindItemHandler::HandleFinderCommandL()
+// ------------------------------------------------------------------------------
+//
+void CMsgMailViewerFindItemHandler::HandleFinderCommandL( TInt aCommand )
+ {
+ iFindItemMenu->HandleItemFinderCommandL( aCommand );
+ }
+
+// End of File