meetingrequest/mrgui/src/cesmrview.cpp
changeset 0 8466d47a6819
child 16 4ce476e64c59
equal deleted inserted replaced
-1:000000000000 0:8466d47a6819
       
     1 /*
       
     2 * Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  ESMR UI Container class
       
    15 *
       
    16 */
       
    17 
       
    18 // <cmail> custom sw help files not avilable in Cmail
       
    19 //#include <fscale.hlp.hrh> //for custom_sw helps
       
    20 //#include <fsmr.hlp.hrh> //for custom_sw helps
       
    21 // </cmail>
       
    22 #include "cesmrview.h"
       
    23 #include "mesmrmeetingrequestentry.h"
       
    24 #include "esmrinternaluid.h"
       
    25 #include "cesmrtitlepane.h"
       
    26 #include "cesmrfield.h"
       
    27 #include "mesmrcalentry.h"
       
    28 #include "nmrlayoutmanager.h"
       
    29 #include "FreestyleEmailUiConstants.h"
       
    30 
       
    31 #include <eiklabel.h>
       
    32 #include <avkon.hrh>
       
    33 #include <MAgnEntryUi.h>
       
    34 #include <StringLoader.h>
       
    35 #include <gulcolor.h>
       
    36 #include <eikimage.h>
       
    37 #include <esmrgui.rsg>
       
    38 #include <AknIconUtils.h>
       
    39 #include <eikenv.h>
       
    40 #include <AknsConstants.h>
       
    41 #include <AknUtils.h>
       
    42 #include <AknsDrawUtils.h>
       
    43 #include <AknsBasicBackgroundControlContext.h>
       
    44 #include <hlplch.h>
       
    45 #include <csxhelp/cmail.hlp.hrh>
       
    46 
       
    47 #include <featmgr.h>
       
    48 //</cmail>
       
    49 
       
    50 #include "emailtrace.h"
       
    51 
       
    52 
       
    53 // <cmail> Removed profiling. </cmail>
       
    54 
       
    55 
       
    56 // ======== MEMBER FUNCTIONS ========
       
    57 
       
    58 // ---------------------------------------------------------------------------
       
    59 // CESMRView::CESMRView()
       
    60 // ---------------------------------------------------------------------------
       
    61 //
       
    62 CESMRView::CESMRView( MESMRFieldStorage* aStorage, MESMRCalEntry& aEntry ) :
       
    63 	iStorage(aStorage),
       
    64 	iEntry(aEntry)
       
    65     {
       
    66     FUNC_LOG;
       
    67     // Do nothing
       
    68     }
       
    69 
       
    70 // ---------------------------------------------------------------------------
       
    71 // CESMRView::NewL()
       
    72 // ---------------------------------------------------------------------------
       
    73 //
       
    74 CESMRView* CESMRView::NewL(
       
    75         MESMRFieldStorage* aStorage,
       
    76         MESMRCalEntry& aEntry,
       
    77         const TRect& aRect )
       
    78     {
       
    79     FUNC_LOG;
       
    80     CESMRView* self = new (ELeave) CESMRView( aStorage, aEntry );
       
    81     CleanupStack::PushL( self );
       
    82     self->ConstructL( aRect );
       
    83     CleanupStack::Pop( self );
       
    84     return self;
       
    85     }
       
    86 
       
    87 // ---------------------------------------------------------------------------
       
    88 // CESMRView::ConstructL()
       
    89 // ---------------------------------------------------------------------------
       
    90 //
       
    91 void CESMRView::ConstructL( const TRect& aRect )
       
    92     {
       
    93     FUNC_LOG;
       
    94     iBgContext = CAknsBasicBackgroundControlContext::NewL( 
       
    95             KAknsIIDQsnBgAreaMain, aRect, ETrue);
       
    96 
       
    97     iLayout = CESMRLayoutManager::NewL();
       
    98     iLayout->SetObserver( NULL );
       
    99     iTitle = CESMRTitlePane::NewL();
       
   100     // Default title text is set here.
       
   101 
       
   102     HBufC* title ;
       
   103     switch (iEntry.Type())
       
   104         {
       
   105         case MESMRCalEntry::EESMRCalEntryTodo:
       
   106         	{
       
   107             title = StringLoader::LoadLC ( R_QTN_CALENDAR_TITLE_NEW_TODO );
       
   108             break;
       
   109         	}
       
   110         case MESMRCalEntry::EESMRCalEntryMemo:
       
   111         	{
       
   112             title = StringLoader::LoadLC ( R_QTN_CALENDAR_TITLE_NEW_MEMO );
       
   113             break;
       
   114         	}
       
   115         case MESMRCalEntry::EESMRCalEntryAnniversary:
       
   116         	{
       
   117             title = StringLoader::LoadLC(R_QTN_CALENDAR_TITLE_NEW_ANNIVERSARY);
       
   118             break;
       
   119         	}
       
   120         case MESMRCalEntry::EESMRCalEntryMeetingRequest: // Fall through
       
   121         case MESMRCalEntry::EESMRCalEntryMeeting: // Fall through
       
   122         case MESMRCalEntry::EESMRCalEntryReminder: // Fall through
       
   123         default:
       
   124         	{
       
   125             title = StringLoader::LoadLC( R_QTN_MEET_REQ_TITLE );
       
   126             break;
       
   127         	}
       
   128         }
       
   129 
       
   130     iTitle->SetTextL( *title );
       
   131     CleanupStack::PopAndDestroy( title );
       
   132 
       
   133     SetRect( aRect );
       
   134     }
       
   135 
       
   136 // ---------------------------------------------------------------------------
       
   137 // CESMRView::~CESMRView()
       
   138 // ---------------------------------------------------------------------------
       
   139 //
       
   140 CESMRView::~CESMRView()
       
   141     {
       
   142     FUNC_LOG;
       
   143     delete iTitle;
       
   144     delete iList;
       
   145     delete iLayout;
       
   146     delete iBgContext;
       
   147     }
       
   148 
       
   149 // ---------------------------------------------------------------------------
       
   150 // CESMRView::ExternalizeL()
       
   151 // ---------------------------------------------------------------------------
       
   152 //
       
   153 void CESMRView::ExternalizeL( TBool aForceValidation )
       
   154     {
       
   155     FUNC_LOG;
       
   156     // externalize all fields:
       
   157     iList->ExternalizeL( iEntry, aForceValidation );
       
   158     // externalize title pane for priority value
       
   159     iTitle->ExternalizeL( iEntry );
       
   160     }
       
   161 
       
   162 // ---------------------------------------------------------------------------
       
   163 // CESMRView::InternalizeL()
       
   164 // ---------------------------------------------------------------------------
       
   165 //
       
   166 void CESMRView::InternalizeL()
       
   167     {
       
   168     FUNC_LOG;
       
   169     // internalize title pane ( for priority )
       
   170     iTitle->InternalizeL( iEntry );
       
   171     iList->DisableSizeChange( ETrue );
       
   172     // internalize all fields:
       
   173     iList->InternalizeL( iEntry );
       
   174     iList->DisableSizeChange( EFalse );
       
   175     iList->SizeChanged();
       
   176     }
       
   177 
       
   178 // ---------------------------------------------------------------------------
       
   179 // CESMRView::IsComponentVisible()
       
   180 // ---------------------------------------------------------------------------
       
   181 //
       
   182 TBool CESMRView::IsComponentVisible( TESMREntryFieldId aField ) const
       
   183     {
       
   184     FUNC_LOG;
       
   185     return iList->ListObserver().IsControlVisible( aField );
       
   186     }
       
   187 
       
   188 
       
   189 // ---------------------------------------------------------------------------
       
   190 // CESMRView::CanProcessEditorCommandL
       
   191 // ---------------------------------------------------------------------------
       
   192 //
       
   193 TBool CESMRView::CanProcessEditorCommandL( TInt aCommand )
       
   194     {
       
   195     FUNC_LOG;
       
   196     CESMRField*  field = iList->FocusedItem();
       
   197     TBool result(ETrue);
       
   198     switch ( aCommand )
       
   199         {
       
   200         case EESMRCmdClipboardCopy:
       
   201         switch (field->FieldId())
       
   202             {
       
   203             // quite few fields allow copiing
       
   204             case EESMRFieldOrganizer:       // fall through 
       
   205             case EESMRFieldAttendee:        // fall through 
       
   206             case EESMRFieldDetailedSubject: // fall through 
       
   207             case EESMRFieldDescription:     // fall through
       
   208                 result = ETrue;
       
   209                 break;
       
   210             }
       
   211         break;
       
   212         default:
       
   213             result = EFalse;
       
   214             break;
       
   215         }
       
   216     return result;    
       
   217     }
       
   218     
       
   219 // ---------------------------------------------------------------------------
       
   220 // CESMRView::ProcessCommandL
       
   221 // ---------------------------------------------------------------------------
       
   222 //
       
   223 void CESMRView::ProcessEditorCommandL( TInt aCommand )
       
   224     {
       
   225     FUNC_LOG;
       
   226     switch ( aCommand )
       
   227         {
       
   228         case EESMRCmdPriorityHigh: // Fall through
       
   229         case EESMRCmdPriorityNormal: // Fall through
       
   230         case EESMRCmdPriorityLow: 
       
   231         	{
       
   232             iTitle->HandleSetPriorityCmdL( aCommand );
       
   233             break;
       
   234         	}
       
   235         case EESMRCmdAddOptAttendee:
       
   236         	{
       
   237             iList->ListObserver().InsertControl( EESMRFieldOptAttendee );
       
   238             SetControlFocusedL(EESMRFieldOptAttendee);
       
   239             break;
       
   240         	}
       
   241         case EAknCmdHelp:
       
   242         	{
       
   243         	break;
       
   244         	}
       
   245         case EESMRCmdEdit:
       
   246             {
       
   247             iList->ListObserver().InsertControl( EESMRFieldResponseArea );
       
   248             iList->ListObserver().RemoveControl( EESMRFieldResponseReadyArea );
       
   249             iList->ListObserver().SetControlFocusedL( EESMRFieldResponseArea );
       
   250             break;
       
   251             }
       
   252         default://forward to fields
       
   253         	{
       
   254             iList->FocusedItem()->ExecuteGenericCommandL(aCommand);
       
   255             break;
       
   256         	}
       
   257         }
       
   258     }
       
   259 
       
   260 // ---------------------------------------------------------------------------
       
   261 // CIpsSetUiDialogCtrl::DynInitMenuPaneL()
       
   262 // ---------------------------------------------------------------------------
       
   263 //
       
   264 void CESMRView::DynInitMenuPaneL(
       
   265         /*TInt aResourceId,*/
       
   266         CEikMenuPane* aMenuPane )
       
   267     {
       
   268     FUNC_LOG;
       
   269 	if ( FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ) )
       
   270 		{
       
   271 		// remove help support in pf5250
       
   272 		aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue);      
       
   273 		}
       
   274     }
       
   275 
       
   276 
       
   277 // ---------------------------------------------------------------------------
       
   278 // CESMRView::LaunchEditorHelpL
       
   279 // ---------------------------------------------------------------------------
       
   280 //
       
   281 void CESMRView::LaunchEditorHelpL()
       
   282     {
       
   283     FUNC_LOG;
       
   284     LaunchHelpL( KFSE_HLP_LAUNCHER_GRID );
       
   285     }
       
   286 
       
   287 // ---------------------------------------------------------------------------
       
   288 // CESMRView::LaunchViewerHelpL
       
   289 // ---------------------------------------------------------------------------
       
   290 //
       
   291 void CESMRView::LaunchViewerHelpL()
       
   292     {
       
   293     FUNC_LOG;
       
   294     LaunchHelpL( KFSE_HLP_LAUNCHER_GRID );
       
   295     }
       
   296 
       
   297 // ---------------------------------------------------------------------------
       
   298 // CESMRView::IsComponentfocused
       
   299 // ---------------------------------------------------------------------------
       
   300 //
       
   301 TBool CESMRView::IsComponentFocused( TESMREntryFieldId aField ) const
       
   302 	{
       
   303     FUNC_LOG;
       
   304 	return 	FocusedField() == aField;
       
   305 	}
       
   306 
       
   307 // ---------------------------------------------------------------------------
       
   308 // CESMRView::IsComponentfocused
       
   309 // ---------------------------------------------------------------------------
       
   310 //
       
   311 TESMREntryFieldId CESMRView::FocusedField() const
       
   312     {
       
   313     FUNC_LOG;
       
   314     TESMREntryFieldId fieldId( ( TESMREntryFieldId ) 0 );
       
   315     
       
   316 	CESMRField* field = iList->FocusedItem();
       
   317     
       
   318     if ( field )
       
   319         {
       
   320         fieldId = field->FieldId();
       
   321         }
       
   322     
       
   323     return fieldId;
       
   324 	}
       
   325 
       
   326 // ---------------------------------------------------------------------------
       
   327 // CESMRView::LaunchHelpL
       
   328 // ---------------------------------------------------------------------------
       
   329 //
       
   330 void CESMRView::LaunchHelpL( const TDesC& aContext )
       
   331     {
       
   332     FUNC_LOG;
       
   333     
       
   334     CArrayFix<TCoeHelpContext>* cntx = 
       
   335 		new (ELeave) CArrayFixFlat<TCoeHelpContext>(1);
       
   336     CleanupStack::PushL(cntx);
       
   337     cntx->AppendL( TCoeHelpContext( KFSEmailUiUid, aContext ) );
       
   338     CleanupStack::Pop(cntx);
       
   339     HlpLauncher::LaunchHelpApplicationL( iCoeEnv->WsSession(), cntx );
       
   340     }
       
   341 
       
   342 // ---------------------------------------------------------------------------
       
   343 // CESMRView::UpdateTitlePaneTextL
       
   344 // ---------------------------------------------------------------------------
       
   345 //
       
   346 void CESMRView::UpdateTitlePaneTextL( const TDesC& aText )
       
   347     {
       
   348     FUNC_LOG;
       
   349     SetTitleL( aText );
       
   350     }
       
   351 
       
   352 // ---------------------------------------------------------------------------
       
   353 // CESMRView::UpdateTitlePanePriorityIconL()
       
   354 // ---------------------------------------------------------------------------
       
   355 //
       
   356 void CESMRView::UpdateTitlePanePriorityIconL( TUint aPriority )
       
   357     {
       
   358     FUNC_LOG;
       
   359     iTitle->SetPriorityL( aPriority );
       
   360     }
       
   361 
       
   362 // ---------------------------------------------------------------------------
       
   363 // CESMRView::SetContainerWindowL
       
   364 // ---------------------------------------------------------------------------
       
   365 //
       
   366 void CESMRView::SetContainerWindowL(const CCoeControl& aContainer)
       
   367     {
       
   368     FUNC_LOG;
       
   369     CCoeControl::SetContainerWindowL( aContainer );
       
   370     iTitle->SetContainerWindowL( *this );
       
   371     /**
       
   372      * Somehow if list is constructed before this SetContainerWindowL is called,
       
   373      * all redraws throws KERN-EXEC 3 (the CCoeControl's iWin variable is NULL)
       
   374      */
       
   375     
       
   376     iList = CESMRListComponent::NewL( this, iStorage, iLayout );
       
   377     iList->SetBackground( this );
       
   378     // Font size setting Observer can now be set
       
   379     iLayout->SetObserver( this );
       
   380     }
       
   381 
       
   382 // ---------------------------------------------------------------------------
       
   383 // CESMRView::CountComponentControls
       
   384 // ---------------------------------------------------------------------------
       
   385 //
       
   386 TInt CESMRView::CountComponentControls() const
       
   387     {
       
   388     FUNC_LOG;
       
   389     TInt count( 0 );
       
   390 
       
   391     if ( iTitle )
       
   392         ++count;
       
   393 
       
   394     if ( iList )
       
   395         ++count;
       
   396 
       
   397     return count;
       
   398     }
       
   399 
       
   400 // ---------------------------------------------------------------------------
       
   401 // CESMRView::ComponentControl()
       
   402 // ---------------------------------------------------------------------------
       
   403 //
       
   404 CCoeControl* CESMRView::ComponentControl( TInt aInd ) const
       
   405     {
       
   406     FUNC_LOG;
       
   407     switch ( aInd )
       
   408         {
       
   409         case 0:
       
   410         	{
       
   411             return iTitle;
       
   412         	}
       
   413         case 1:
       
   414         	{
       
   415             return iList;
       
   416         	}
       
   417         default:
       
   418         	{
       
   419             return NULL;
       
   420         	}
       
   421         }
       
   422     }
       
   423 
       
   424 // ---------------------------------------------------------------------------
       
   425 // CESMRView::SizeChanged()
       
   426 // ---------------------------------------------------------------------------
       
   427 //
       
   428 void CESMRView::SizeChanged()
       
   429     {
       
   430     FUNC_LOG;
       
   431     
       
   432     TRect rect( Rect() );
       
   433     if ( iTitle )
       
   434         {
       
   435         TAknWindowComponentLayout titleLayout =
       
   436             NMRLayoutManager::GetWindowComponentLayout( NMRLayoutManager::EMRLayoutCtrlBar );
       
   437         AknLayoutUtils::LayoutControl( iTitle, rect, titleLayout );
       
   438         }
       
   439     if ( iList )
       
   440         {
       
   441         TAknWindowComponentLayout listLayout =
       
   442             NMRLayoutManager::GetWindowComponentLayout( NMRLayoutManager::EMRLayoutContentArea );
       
   443         AknLayoutUtils::LayoutControl( iList, rect, listLayout );
       
   444         }
       
   445     if( iBgContext )
       
   446         {
       
   447         iBgContext->SetRect( rect );
       
   448         if ( &Window() )
       
   449             {
       
   450             iBgContext->SetParentPos( PositionRelativeToScreen() );
       
   451             }
       
   452         }
       
   453     }
       
   454 
       
   455 // ---------------------------------------------------------------------------
       
   456 // CESMRView::MinimumSize()
       
   457 // Gets the main pane size needed by CEikDialog to layout itself correctly
       
   458 // ---------------------------------------------------------------------------
       
   459 //
       
   460 TSize CESMRView::MinimumSize()
       
   461     {
       
   462     FUNC_LOG;
       
   463     TRect rect;
       
   464     AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, rect );
       
   465     return rect.Size();
       
   466     }
       
   467 
       
   468 // ---------------------------------------------------------------------------
       
   469 // CESMRView::OfferKeyEventL
       
   470 // ---------------------------------------------------------------------------
       
   471 //
       
   472 TKeyResponse CESMRView::OfferKeyEventL(
       
   473 		const TKeyEvent &aKeyEvent, 
       
   474 		TEventCode aType)
       
   475     {
       
   476     FUNC_LOG;
       
   477     TKeyResponse response( EKeyWasNotConsumed );
       
   478     if ( iList )
       
   479         {
       
   480         response = iList->OfferKeyEventL( aKeyEvent, aType );
       
   481         }
       
   482     return response;
       
   483     }
       
   484 
       
   485 // ---------------------------------------------------------------------------
       
   486 // CESMRView::Draw
       
   487 // This Draw is called when background for title pane (iTitle) is drawn
       
   488 // ---------------------------------------------------------------------------
       
   489 //
       
   490 void CESMRView::Draw( const TRect& aRect ) const
       
   491     {
       
   492     FUNC_LOG;
       
   493     CWindowGc& gc = SystemGc();
       
   494       
       
   495     // Draw the background for iTitle using the current skin
       
   496     MAknsSkinInstance* skin = AknsUtils::SkinInstance();
       
   497     MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
       
   498     AknsDrawUtils::Background( skin, cc, this, gc, aRect );
       
   499     }
       
   500 
       
   501 // ---------------------------------------------------------------------------
       
   502 // CESMRView::Draw
       
   503 // This draw method draws the dialog area
       
   504 // ---------------------------------------------------------------------------
       
   505 //
       
   506 void CESMRView::Draw(
       
   507 		CWindowGc&  aGc , 
       
   508 		const CCoeControl& /* aControl */, 
       
   509 		const TRect& /*aRect*/) const
       
   510     {
       
   511     FUNC_LOG;
       
   512     aGc.Clear();
       
   513     }
       
   514 
       
   515 // ---------------------------------------------------------------------------
       
   516 // CESMRView::GetTextDrawer
       
   517 // ---------------------------------------------------------------------------
       
   518 //
       
   519 void CESMRView::GetTextDrawer(
       
   520 		CCoeTextDrawerBase*& /*aText*/, 
       
   521 		const CCoeControl* /*aControl*/) const
       
   522     {
       
   523     // Do nothing
       
   524     }
       
   525 
       
   526 // ---------------------------------------------------------------------------
       
   527 // CESMRView::SetTitleL()
       
   528 // ---------------------------------------------------------------------------
       
   529 //
       
   530 void CESMRView::SetTitleL( const TDesC& aTitle, TBool aDefault)
       
   531     {
       
   532     FUNC_LOG;
       
   533     iTitle->SetTextL( aTitle );
       
   534     iTitle->SetDefaultIcon(aDefault);
       
   535     }
       
   536 
       
   537 // ---------------------------------------------------------------------------
       
   538 // CESMRView::SetControlFocusedL()
       
   539 // ---------------------------------------------------------------------------
       
   540 //
       
   541 void CESMRView::SetControlFocusedL( TESMREntryFieldId aField )
       
   542     {
       
   543     FUNC_LOG;
       
   544     iList->ListObserver().SetControlFocusedL( aField );
       
   545     }
       
   546 
       
   547 // ---------------------------------------------------------------------------
       
   548 // CESMRView::FontSizeSettingsChanged()
       
   549 // ---------------------------------------------------------------------------
       
   550 //
       
   551 void CESMRView::FontSizeSettingsChanged()
       
   552     {
       
   553     FUNC_LOG;
       
   554     iList->HandleFontChange();
       
   555     SizeChanged();
       
   556     }
       
   557 
       
   558 // ---------------------------------------------------------------------------
       
   559 // CESMRView::HandleResourceChange()
       
   560 // ---------------------------------------------------------------------------
       
   561 //
       
   562 void CESMRView::HandleResourceChange( TInt aType )
       
   563     {
       
   564     FUNC_LOG;
       
   565     CCoeControl::HandleResourceChange( aType );
       
   566     TInt error = KErrNone;
       
   567     
       
   568     switch ( aType )
       
   569         {
       
   570         case  KAknsMessageSkinChange:
       
   571             {
       
   572             TRAP( error, iList->InitializeL() );
       
   573             SizeChanged();
       
   574             break;
       
   575             }
       
   576         case KEikMessageColorSchemeChange:
       
   577             {
       
   578             TRAP( error, iList->InitializeL() );
       
   579             SizeChanged();
       
   580             break;
       
   581             }
       
   582         case KEikDynamicLayoutVariantSwitch:
       
   583         case KAknLocalZoomLayoutSwitch:
       
   584             {
       
   585             SizeChanged();
       
   586             break;
       
   587             }
       
   588         default:
       
   589             {
       
   590             break;
       
   591             }
       
   592         }
       
   593 
       
   594     if ( error != KErrNone )
       
   595         {
       
   596         iCoeEnv->HandleError( error );
       
   597         }
       
   598     }
       
   599 
       
   600 // ---------------------------------------------------------------------------
       
   601 // CESMRView::MopSupplyObject()
       
   602 // ---------------------------------------------------------------------------
       
   603 //
       
   604 TTypeUid::Ptr CESMRView::MopSupplyObject( TTypeUid aId )
       
   605     {
       
   606     if ( iBgContext )
       
   607         {
       
   608         return MAknsControlContext::SupplyMopObject( aId, iBgContext );
       
   609         }
       
   610     return CCoeControl::MopSupplyObject( aId );
       
   611     }
       
   612     
       
   613 // <cmail>
       
   614 // ---------------------------------------------------------------------------
       
   615 // CESMRView::FocusChanged
       
   616 // ---------------------------------------------------------------------------
       
   617 //
       
   618 void CESMRView::FocusChanged(TDrawNow aDrawNow)
       
   619     {
       
   620     CCoeControl::FocusChanged(aDrawNow);
       
   621     
       
   622     // if attachments are focused, update the field to make sure
       
   623     // attachment status is shown correctly
       
   624     if( IsComponentFocused( EESMRFieldAttachments ) )
       
   625         {
       
   626         TRAP_IGNORE( iList->FocusedItem()->SetOutlineFocusL(ETrue) );
       
   627         }
       
   628     }
       
   629 // </cmail>
       
   630 
       
   631 // EOF
       
   632