logsui/AppSrc/CCtControlContainer.cpp
changeset 0 e686773b3f54
child 21 9da50d567e3c
equal deleted inserted replaced
-1:000000000000 0:e686773b3f54
       
     1 /*
       
     2 * Copyright (c) 2002 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: 
       
    15 *     Logs "AoC & CT list" view container class implementation
       
    16 *
       
    17 */
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include <aknnotedialog.h>      // Note popup window.
       
    21 #include <AknIconArray.h>    // icon array
       
    22 #include <aknnavide.h>
       
    23 #include <akntabgrp.h>      // tab group
       
    24 #include <aknPopup.h>       // als query popup
       
    25 #include <AknsConstants.h>  //for skinned icons
       
    26 
       
    27 #include <Logs.rsg>           // note structure
       
    28 #include <logs.mbg>     // Logs own icons
       
    29 
       
    30 #include <csxhelp/log.hlp.hrh>
       
    31 
       
    32 #include "CCtControlContainer.h"
       
    33 #include "CCtView.h"
       
    34 #include "CLogsCtAdapter.h"
       
    35 #include "CLogsEngine.h"
       
    36 #include "MLogsSharedData.h"
       
    37 #include "MLogsSystemAgent.h"
       
    38 
       
    39 #include "CLogsAocObjFactory.h"
       
    40 #include "MLogsCallStatus.h"
       
    41 #include "MLogsAocUtil.h"
       
    42 #include "CLogsNaviDecoratorWrapper.h"
       
    43 
       
    44 #include "LogsIcons.hrh"
       
    45 #include "Logs.hrh"
       
    46 
       
    47 #include "LogsUID.h"
       
    48 
       
    49 
       
    50 // EXTERNAL DATA STRUCTURES
       
    51 
       
    52 // EXTERNAL FUNCTION PROTOTYPES  
       
    53 
       
    54 // CONSTANTS
       
    55 const TInt KTimeLen = 20;       //Chars needed for time string (same as in CLogsCtAdapter.cpp)
       
    56            
       
    57 // Timer timeout, used to refresh view when in call timers view. Needs to be quite short 
       
    58 // in order provide perception of even time refreshments to display.         
       
    59 const TInt KDelay = 250000;
       
    60 
       
    61 // ================= MEMBER FUNCTIONS =======================
       
    62 
       
    63 // ----------------------------------------------------------------------------
       
    64 // CCtControlContainer::NewL
       
    65 // ----------------------------------------------------------------------------
       
    66 //
       
    67 CCtControlContainer* CCtControlContainer::NewL( 
       
    68     CLogsBaseView* aAppView,
       
    69     const TRect& aRect )
       
    70     {
       
    71     CCtControlContainer* self = new( ELeave ) CCtControlContainer( 
       
    72                                             aAppView );
       
    73     self->SetMopParent( aAppView );
       
    74     CleanupStack::PushL( self );
       
    75     self->ConstructL( aRect );
       
    76     CleanupStack::Pop();  // self
       
    77     return self;
       
    78     }
       
    79 
       
    80 // ----------------------------------------------------------------------------
       
    81 // CCtControlContainer::ConstructL
       
    82 // ----------------------------------------------------------------------------
       
    83 //
       
    84 void CCtControlContainer::ConstructL( const TRect& aRect)
       
    85     {
       
    86     BaseConstructL();
       
    87   
       
    88 	CAknNavigationDecorator* decoratedTabGroup = NavigationTabGroupL( R_LOGS_SUB_APP_PANE_TAB_GROUP,
       
    89 	                                                                  CLogsNaviDecoratorWrapper::InstanceL() );
       
    90 
       
    91     CAknTabGroup* tabGroup = static_cast<CAknTabGroup*>( decoratedTabGroup->
       
    92                                     DecoratedControl() );
       
    93     
       
    94     MakeTitleL( R_AOCCT_TITLE_TEXT_CT );
       
    95     tabGroup->SetActiveTabById( ESubAppTimersTabId );
       
    96 
       
    97     // Listbox & Adapter 
       
    98     iListBox = new ( ELeave ) CAknDoubleLargeStyleListBox;
       
    99     iListBox->ConstructL( this, EAknListBoxSelectionList );
       
   100     
       
   101     iAocUtil = CLogsAocObjFactory::AocUtilL();
       
   102     
       
   103     iCallStatus = CLogsAocObjFactory::CallStatusLC();
       
   104     CleanupStack::Pop();    
       
   105 
       
   106     iCallStatus->SetObserver( this );   //In order to receive status change notifications
       
   107                                         //through MLineStatusObserver
       
   108     
       
   109     CCtView* view = static_cast<CCtView*>( iAppView );
       
   110     CLogsCtAdapter* adapter = CLogsCtAdapter::NewL( iAppView->
       
   111                                     Engine()->SharedDataL(),
       
   112                                     view->AlsLine(),  //Default EAllLines
       
   113                                     *iCallStatus);
       
   114     iListBox->Model()->SetItemTextArray(adapter);
       
   115 
       
   116     iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
       
   117     MakeScrollArrowsL( iListBox );
       
   118 
       
   119 	AddControlContainerIconsL();
       
   120 
       
   121     //  Update data in listbox
       
   122     UpdateListBoxContentL();
       
   123 
       
   124     // Activate the control and all subcontrols
       
   125     SetRect( aRect );
       
   126     ActivateL();
       
   127     }
       
   128 
       
   129 
       
   130 // ----------------------------------------------------------------------------
       
   131 // CCtControlContainer::CCtControlContainer
       
   132 // ----------------------------------------------------------------------------
       
   133 //
       
   134 CCtControlContainer::CCtControlContainer( 
       
   135     CLogsBaseView* aAppView ) :
       
   136         CLogsBaseControlContainer( aAppView ),
       
   137         iAppView( aAppView )
       
   138     {
       
   139     }
       
   140 
       
   141 // ----------------------------------------------------------------------------
       
   142 // CCtControlContainer::~CCtControlContainer
       
   143 // ----------------------------------------------------------------------------
       
   144 //
       
   145 CCtControlContainer::~CCtControlContainer()
       
   146     {
       
   147     delete iAocUtil;
       
   148     delete iCallStatus;
       
   149     delete iPeriodic;
       
   150     delete iListBox;   
       
   151     }
       
   152 
       
   153 
       
   154 // ----------------------------------------------------------------------------
       
   155 // CCtControlContainer::ComponentControl
       
   156 // ----------------------------------------------------------------------------
       
   157 //
       
   158 CCoeControl* CCtControlContainer::ComponentControl( 
       
   159     TInt /*aIndex*/) const
       
   160     {
       
   161     return iListBox;
       
   162     }
       
   163 
       
   164 // ----------------------------------------------------------------------------
       
   165 // CCtControlContainer::SizeChanged
       
   166 // ----------------------------------------------------------------------------
       
   167 //
       
   168 void CCtControlContainer::SizeChanged()
       
   169     {
       
   170     if( iListBox )
       
   171         {
       
   172         iListBox->SetRect( Rect() );
       
   173         }
       
   174     }
       
   175 
       
   176 
       
   177 //Called by timer every KDelay interval to update list box content
       
   178 // ----------------------------------------------------------------------------
       
   179 // CCtControlContainer::TimerLaunchedL
       
   180 // ----------------------------------------------------------------------------
       
   181 //
       
   182 TInt CCtControlContainer::TimerLaunchedL(TAny* aContainer)
       
   183     {
       
   184     CCtControlContainer* container = 
       
   185             static_cast<CCtControlContainer*>( aContainer );
       
   186     container->UpdateListBoxContentL();
       
   187     return 0; // needs to return just something.
       
   188     }
       
   189 
       
   190 
       
   191 //  Returns the iListBox.
       
   192 // ----------------------------------------------------------------------------
       
   193 // CCtControlContainer::ListBox
       
   194 // ----------------------------------------------------------------------------
       
   195 //
       
   196 CAknDoubleLargeStyleListBox* CCtControlContainer::ListBox()
       
   197     {
       
   198     return iListBox;
       
   199     }
       
   200 
       
   201 
       
   202 //  Checks updates for listbox. Launches timer to do update every KDelay interval
       
   203 // ----------------------------------------------------------------------------
       
   204 // CCtControlContainer::UpdateListBoxContentL
       
   205 // ----------------------------------------------------------------------------
       
   206 //
       
   207 void CCtControlContainer::UpdateListBoxContentL()
       
   208     {
       
   209     TBool activeCall( EFalse );
       
   210     TBool showCallDuration( EFalse );
       
   211     iCallStatus->CallIsActive( activeCall ); 
       
   212     showCallDuration = iAppView->Engine()->SharedDataL()->ShowCallDurationLogsL();
       
   213     
       
   214     if ( activeCall && showCallDuration )
       
   215         { 
       
   216         if( ! iPeriodic )
       
   217             {
       
   218             iPeriodic = CPeriodic::NewL( EPriorityMore );
       
   219             iPeriodic->Start( KDelay, KDelay, TCallBack(TimerLaunchedL, this) );
       
   220             }                
       
   221         }
       
   222     else
       
   223         {
       
   224         delete iPeriodic;
       
   225         iPeriodic = NULL;
       
   226         }
       
   227             
       
   228     CLogsCtAdapter* adapter = static_cast<CLogsCtAdapter*>(
       
   229                         iListBox->Model()->ItemTextArray() );
       
   230 
       
   231     if( adapter->UpdateDataL() )    //To avoid excessive flicker, update only when 
       
   232         {                           // values have changed
       
   233         iListBox->HandleItemAdditionL();
       
   234         }
       
   235     }
       
   236 
       
   237 
       
   238 // ----------------------------------------------------------------------------
       
   239 // CCtControlContainer::ShowDurationDetailsL
       
   240 // ----------------------------------------------------------------------------
       
   241 //
       
   242 void CCtControlContainer::ShowDurationDetailsL( TInt aCommandId )
       
   243     {
       
   244     // Pop-up listbox construction
       
   245     CAknSingleHeadingPopupMenuStyleListBox* tmpPopUpListBox = new ( ELeave ) CAknSingleHeadingPopupMenuStyleListBox;
       
   246     CleanupStack::PushL( tmpPopUpListBox );
       
   247 
       
   248     // Creation of the popupList, to which the text will be inserted
       
   249     CAknPopupList* popupFrame = CAknPopupList::NewL( tmpPopUpListBox, R_AVKON_SOFTKEYS_OK_EMPTY__OK );
       
   250     CleanupStack::PushL( popupFrame );  
       
   251     tmpPopUpListBox->ConstructL( popupFrame, CEikListBox::ELeftDownInViewRect ); //tmpPopUpListBox->ConstructL( popupFrame, EAknListBoxViewerFlags );
       
   252 
       
   253     // Disable highlight for the popup listbox.
       
   254     tmpPopUpListBox->ItemDrawer()->SetFlags( CListItemDrawer::EDisableHighlight );
       
   255     
       
   256     // Creation of one item, to which the temporary text will be inserted
       
   257     CDesCArrayFlat* items = new ( ELeave ) CDesCArrayFlat( 4 );
       
   258     CleanupStack::PushL( items );
       
   259 
       
   260     //  Creation of the model, which handles the text items
       
   261     CTextListBoxModel* model = tmpPopUpListBox->Model();
       
   262     model->SetItemTextArray( items );
       
   263     model->SetOwnershipType( ELbmOwnsItemArray );
       
   264     CleanupStack::Pop( items );     
       
   265     tmpPopUpListBox->HandleItemAdditionL();
       
   266 
       
   267     //  Title of the Pop-Up window
       
   268     HBufC* textFromResourceFile;
       
   269     TAlsEnum  line = EAllLines;     
       
   270     TVoipEnum voip = EVoipIncluded;   
       
   271     
       
   272     if ( aCommandId == EAocCtCmdMenuDetailsVoip)
       
   273         {
       
   274         textFromResourceFile = CCoeEnv::Static()->AllocReadResourceLC( R_CT_QTL_VOIP_DURATION );        
       
   275         line = EVoiceLinesExcluded;    //No voice data added,
       
   276         voip = EVoipIncluded;          // only voip
       
   277         }
       
   278     else
       
   279         {
       
   280         textFromResourceFile = CCoeEnv::Static()->AllocReadResourceLC( R_CT_QTL_CS_DURATION );        
       
   281         CCtView* view = static_cast<CCtView*>( iAppView );
       
   282         line = view->AlsLine();  //User's selected ALS line
       
   283         voip = EVoipExcluded;    // no voip
       
   284         }
       
   285         
       
   286     popupFrame->SetTitleL( *textFromResourceFile );
       
   287     CleanupStack::PopAndDestroy( textFromResourceFile ); 
       
   288 
       
   289     DurationDetailLineL( *items, R_AOCCT_LAST_CALL_TIMER_TEXT,     line, voip );
       
   290     DurationDetailLineL( *items, R_AOCCT_DIALLED_CALLS_TIMER_TEXT, line, voip );
       
   291     DurationDetailLineL( *items, R_AOCCT_RECEIVED_CALLS_TIMER_TEXT,line, voip );
       
   292     DurationDetailLineL( *items, R_AOCCT_ALL_CALLS_TIMER_TEXT,     line, voip );
       
   293 
       
   294     tmpPopUpListBox->SetCurrentItemIndex( 0 ); // Set focus & top index
       
   295     tmpPopUpListBox->SetTopItemIndex( 0 );     // to first line.
       
   296 
       
   297     //Publish the listbow for content updates too: Call counters may be updated while listbox is shown to user.   
       
   298     iDurationDetailsPopupListBox = tmpPopUpListBox; //Now listbow is ready to update it's contents 
       
   299                                                     // if needed while shown to user
       
   300     popupFrame->ExecuteLD();
       
   301         
       
   302     CleanupStack::Pop( popupFrame );     
       
   303     CleanupStack::PopAndDestroy( iDurationDetailsPopupListBox );   
       
   304     iDurationDetailsPopupListBox = 0;   //Hide listbox (no content updates anymore possible to listbox)   
       
   305     }
       
   306     
       
   307 // ----------------------------------------------------------------------------
       
   308 // CCtControlContainer::DurationDetailLineL
       
   309 // ----------------------------------------------------------------------------
       
   310 //
       
   311 void CCtControlContainer::DurationDetailLineL( 
       
   312     CDesCArrayFlat& aItems, 
       
   313     TInt aResource, 
       
   314     TAlsEnum aLine, 
       
   315     TVoipEnum aVoip )
       
   316     {
       
   317     //CLogsCtAdapter provides functionality to retrieve duration details. No need to optimise the below
       
   318     CLogsCtAdapter* adapter = CLogsCtAdapter::NewL( iAppView->Engine()->SharedDataL(),
       
   319                                                     aLine,  
       
   320                                                     *iCallStatus);
       
   321     CleanupStack::PushL( adapter );                                         
       
   322 
       
   323     HBufC* text = iCoeEnv->AllocReadResourceLC( aResource );
       
   324     text = text->ReAllocL( text->Length() + KTimeLen );         //deletes original descriptor
       
   325     CleanupStack::Pop(  );                                      //pop original text from cleanupstack  
       
   326     CleanupStack::PushL( text );                                //push new text to cleanupstack 
       
   327 
       
   328     TPtr ptr = text->Des();
       
   329     ptr.Insert( 0, KTab );        
       
   330 
       
   331     TBuf<KTimeLen> buf;
       
   332     buf.Zero();
       
   333 
       
   334     switch ( aResource )
       
   335         {
       
   336         case R_AOCCT_LAST_CALL_TIMER_TEXT:
       
   337             adapter->LastCallTimeStringL( buf, aLine, aVoip );
       
   338             break;
       
   339         case R_AOCCT_DIALLED_CALLS_TIMER_TEXT:
       
   340             adapter->DialledCallsTimeStringL( buf, aLine, aVoip );
       
   341             break;
       
   342         case R_AOCCT_RECEIVED_CALLS_TIMER_TEXT:
       
   343             adapter->ReceivedCallsTimeStringL( buf, aLine, aVoip );
       
   344             break;
       
   345         case R_AOCCT_ALL_CALLS_TIMER_TEXT:
       
   346             adapter->AllCallsTimeStringL( buf, aLine, aVoip );
       
   347             break;
       
   348         }
       
   349     
       
   350     ptr.Insert( 0, buf );  
       
   351     aItems.AppendL( *text );
       
   352     
       
   353     CleanupStack::PopAndDestroy( text );  
       
   354     CleanupStack::PopAndDestroy( adapter );      
       
   355     }
       
   356     
       
   357 
       
   358 // ----------------------------------------------------------------------------
       
   359 // CCtControlContainer::AlsSettingQueryL
       
   360 // ----------------------------------------------------------------------------
       
   361 //
       
   362 TBool CCtControlContainer::AlsSettingQueryL( TAlsEnum& aAlsSetting )
       
   363     {
       
   364     // Pop-up listbox construction
       
   365     CAknSinglePopupMenuStyleListBox* popupListBox = new ( ELeave )
       
   366             CAknSinglePopupMenuStyleListBox;
       
   367     CleanupStack::PushL( popupListBox );
       
   368 
       
   369     // Creation of the popupList, to which the text will be inserted
       
   370     CAknPopupList* popupFrame = CAknPopupList::NewL( popupListBox, 
       
   371                                 R_AVKON_SOFTKEYS_SELECT_CANCEL );
       
   372     CleanupStack::PushL( popupFrame );  
       
   373     popupListBox->ConstructL( popupFrame, CEikListBox::ELeftDownInViewRect );
       
   374 
       
   375     // Creation of one item, to which the temporary text will be inserted
       
   376     CDesCArrayFlat* items = new ( ELeave ) CDesCArrayFlat( 1 );
       
   377     CleanupStack::PushL( items );
       
   378 
       
   379     // ALS: Both lines logging ON
       
   380     MakeOneLineL( *items, R_CT_ALS_BOTH_LINES_TEXT );
       
   381     // ALS: Line 1 logging ON
       
   382     MakeOneLineL( *items, R_CT_ALS_LINE_ONE_TEXT );
       
   383     // ALS: Line 2 logging ON
       
   384     MakeOneLineL( *items, R_CT_ALS_LINE_TWO_TEXT );
       
   385 
       
   386     //  Creation of the model, which handles the text items
       
   387     CTextListBoxModel* model = popupListBox->Model();
       
   388     model->SetItemTextArray( items );
       
   389     model->SetOwnershipType( ELbmOwnsItemArray );
       
   390     CleanupStack::Pop( items ); 
       
   391     popupListBox->HandleItemAdditionL();
       
   392 
       
   393     //  Title of the Pop-Up window
       
   394     HBufC* textFromResourceFile;
       
   395     textFromResourceFile = CCoeEnv::Static()->AllocReadResourceLC( 
       
   396                                             R_CT_ALS_SELECTION_HEADER );
       
   397     popupFrame->SetTitleL( *textFromResourceFile );
       
   398     CleanupStack::PopAndDestroy( textFromResourceFile );  
       
   399 
       
   400     // set focus & top index
       
   401     popupListBox->SetCurrentItemIndex( aAlsSetting );  // focus to seleted als-line
       
   402     popupListBox->SetTopItemIndex( 0 );                // show list from top
       
   403 
       
   404     TAlsEnum selectedAls = aAlsSetting;
       
   405     // Focus comes here after anything else, but "CANCEL" softkey
       
   406     if( popupFrame->ExecuteLD() )
       
   407         {
       
   408         selectedAls = TAlsEnum(popupListBox->CurrentItemIndex()) ;
       
   409         }
       
   410     else
       
   411         // Filter was not selected.
       
   412         {
       
   413         CleanupStack::Pop( popupFrame ); 
       
   414         CleanupStack::PopAndDestroy( popupListBox ); 
       
   415         return EFalse;
       
   416         }
       
   417     CleanupStack::Pop( popupFrame );     
       
   418     CleanupStack::PopAndDestroy( popupListBox ); 
       
   419 
       
   420     if( selectedAls >= EAllLines && selectedAls <= ELineTwo )    //First three enums can be selected here (LogsAlsEnum.hrh)
       
   421         {
       
   422         aAlsSetting = selectedAls;
       
   423         return ETrue;
       
   424         }
       
   425     return EFalse;
       
   426     }
       
   427 
       
   428 // Makes one listbox line
       
   429 // ----------------------------------------------------------------------------
       
   430 // CCtControlContainer::MakeOneLineL
       
   431 // ----------------------------------------------------------------------------
       
   432 //
       
   433 void CCtControlContainer::MakeOneLineL( 
       
   434     CDesCArrayFlat& aItems, 
       
   435     TInt aResource )
       
   436     {
       
   437     HBufC* text = iCoeEnv->AllocReadResourceLC( aResource );    
       
   438     aItems.AppendL( *text );
       
   439     CleanupStack::PopAndDestroy();  // text
       
   440     }
       
   441 
       
   442 //Called when call status has changed (e.g. call ended)
       
   443 // ----------------------------------------------------------------------------
       
   444 // CCtControlContainer::LineStatusChangedL
       
   445 // ----------------------------------------------------------------------------
       
   446 //
       
   447 void CCtControlContainer::LineStatusChangedL()
       
   448     {
       
   449     UpdateListBoxContentL();  //This calls adapter->UpdateDataL() 
       
   450     
       
   451     //If duration details popup happens to be just now open, update it also.
       
   452     if( iDurationDetailsPopupListBox )  
       
   453         {
       
   454         
       
   455         //FIXME: Add here also updating the listbox contents 
       
   456         iDurationDetailsPopupListBox->HandleItemAdditionL();        
       
   457         }
       
   458     }
       
   459 
       
   460 // ----------------------------------------------------------------------------
       
   461 // CCtControlContainer::SimInfoNotificationL
       
   462 // ----------------------------------------------------------------------------
       
   463 //
       
   464 void CCtControlContainer::SimInfoNotificationL()
       
   465     {
       
   466     UpdateListBoxContentL();
       
   467     }
       
   468 
       
   469 // ----------------------------------------------------------------------------
       
   470 // CCtControlContainer::CallStatus
       
   471 // ----------------------------------------------------------------------------
       
   472 //
       
   473 MLogsCallStatus& CCtControlContainer::CallStatus() const
       
   474     {
       
   475     return *iCallStatus;
       
   476     }
       
   477 
       
   478 //  Return the value of the iCommonControl
       
   479 // ----------------------------------------------------------------------------
       
   480 // CCtControlContainer::AocUtil
       
   481 // ----------------------------------------------------------------------------
       
   482 //
       
   483 MLogsAocUtil& CCtControlContainer::AocUtil() const
       
   484     {
       
   485     return *iAocUtil;
       
   486     }
       
   487 
       
   488 // ----------------------------------------------------------------------------
       
   489 // CCtControlContainer::GetHelpContext
       
   490 // ----------------------------------------------------------------------------
       
   491 //
       
   492 void CCtControlContainer::GetHelpContext( TCoeHelpContext& aContext ) const
       
   493 	{
       
   494     aContext.iMajor = TUid::Uid( KLogsAppUID3 );
       
   495     aContext.iContext = KTIMERS_HLP_MAIN;
       
   496     }
       
   497 
       
   498 // ----------------------------------------------------------------------------
       
   499 // CCtControlContainer::AddControlContainerIconsL
       
   500 // ----------------------------------------------------------------------------
       
   501 //
       
   502 void CCtControlContainer::AddControlContainerIconsL()
       
   503 	{
       
   504 	if( iListBox->ItemDrawer()->FormattedCellData()->IconArray() != NULL )
       
   505 		{
       
   506 		CArrayPtr<CGulIcon>* iconArray = iListBox->ItemDrawer()->FormattedCellData()->IconArray();
       
   507 		delete iconArray;
       
   508 		iconArray = NULL;
       
   509 		iListBox->ItemDrawer()->FormattedCellData()->SetIconArray( iconArray);  	
       
   510 		}
       
   511 
       
   512 	// Load and assign icons to the list box control; 7 is number of icons
       
   513 	CAknIconArray* icons = new( ELeave ) CAknIconArray( KAocCtCCNrOfItems );
       
   514 
       
   515 	iListBox->ItemDrawer()->FormattedCellData()->SetIconArray( icons );
       
   516 
       
   517 	// these values must not be changed unless adaptors are also modified!
       
   518 
       
   519 	// 1st icon & mask. (Active Call Timer)
       
   520 	AddIconL(	icons
       
   521 			,	KLogsIconFile
       
   522             ,   KAknsIIDQgnPropLogTimerCallActive       //AknsConstants.h
       
   523 			,	qgn_prop_log_timer_call_active          //LogsIcons.hrh
       
   524 			,	qgn_prop_log_timer_call_active_mask     //LogsIcons.hrh
       
   525 			);
       
   526 
       
   527 	// 2nd icon & mask. (Last Call Timer)
       
   528 	AddIconL(	icons
       
   529 			,	KLogsIconFile
       
   530             ,   KAknsIIDQgnPropLogTimerCallLast  
       
   531 			,	qgn_prop_log_timer_call_last
       
   532 			,	qgn_prop_log_timer_call_last_mask
       
   533 			);
       
   534 
       
   535 	// 3th icon & mask. (Dialled Calls Timer)
       
   536 	AddIconL(	icons
       
   537 			,	KLogsIconFile
       
   538             ,   KAknsIIDQgnPropLogTimerCallOut  
       
   539 			,	qgn_prop_log_timer_call_out
       
   540 			,	qgn_prop_log_timer_call_out_mask
       
   541 			);
       
   542 
       
   543 	// 4rd icon & mask. (Received Calls Timer)
       
   544 	AddIconL(	icons
       
   545 			,	KLogsIconFile
       
   546             ,   KAknsIIDQgnPropLogTimerCallIn  
       
   547 			,	qgn_prop_log_timer_call_in
       
   548 			,	qgn_prop_log_timer_call_in_mask
       
   549 			);
       
   550 
       
   551 	// 5th icon & mask. (All Calls Timer)
       
   552 	AddIconL(	icons
       
   553 			,	KLogsIconFile
       
   554             ,   KAknsIIDQgnPropLogTimerCallAll 
       
   555 			,	qgn_prop_log_timer_call_all
       
   556 			,	qgn_prop_log_timer_call_all_mask
       
   557 			);
       
   558 	}
       
   559 	
       
   560 // ----------------------------------------------------------------------------
       
   561 // CCtControlContainer::FocusChanged
       
   562 //
       
   563 // This is needed to hand focus changes to list. Otherwise animations are not displayed.
       
   564 // ----------------------------------------------------------------------------
       
   565 //
       
   566 void CCtControlContainer::FocusChanged(TDrawNow /* aDrawNow */ )
       
   567     {
       
   568     if( iListBox)
       
   569         {
       
   570         iListBox->SetFocus( IsFocused() );
       
   571         }
       
   572     }	
       
   573 
       
   574 //  End of File