testexecfw/stf/stfui/touchconsoleui/src/Consolemenus.cpp
changeset 2 8bb370ba6d1d
equal deleted inserted replaced
1:bbd31066657e 2:8bb370ba6d1d
       
     1 /*
       
     2 * Copyright (c) 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: This module contains implementation of 
       
    15 * CMenu-derived classes.
       
    16 *
       
    17 */
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include <e32base.h>
       
    21 #include <e32cons.h>
       
    22 #include <e32svr.h>
       
    23 
       
    24 #include <f32file.h>
       
    25 #include <stifinternal/UIEngineContainer.h>
       
    26 
       
    27 #include "ConsoleUI.h"
       
    28 #include "ConsoleMenus.h"
       
    29 
       
    30 // EXTERNAL DATA STRUCTURES
       
    31 
       
    32 // EXTERNAL FUNCTION PROTOTYPES  
       
    33 
       
    34 // CONSTANTS
       
    35 
       
    36 // MACROS
       
    37 
       
    38 // LOCAL CONSTANTS AND MACROS
       
    39 
       
    40 // MODULE DATA STRUCTURES
       
    41 
       
    42 // LOCAL FUNCTION PROTOTYPES
       
    43 LOCAL_C void LimitedAppend( TDes& aOriginal, const TDesC& aAppend);
       
    44 
       
    45 // FORWARD DECLARATIONS
       
    46 
       
    47 // ==================== LOCAL FUNCTIONS =======================================
       
    48 
       
    49 LOCAL_C void LimitedAppend( TDes& aOriginal, const TDesC& aAppend)
       
    50     {
       
    51 
       
    52     TInt spaceLeft = aOriginal.MaxLength() - aOriginal.Length();
       
    53     
       
    54     if (spaceLeft > aAppend.Length())
       
    55         {
       
    56         aOriginal.Append ( aAppend );
       
    57         }
       
    58     else
       
    59         {       
       
    60         aOriginal.Append ( aAppend.Left ( spaceLeft ) );
       
    61         }
       
    62 
       
    63     }
       
    64 
       
    65 // None
       
    66 
       
    67 // ================= MEMBER FUNCTIONS =========================================
       
    68 
       
    69 
       
    70 /*
       
    71 -------------------------------------------------------------------------------
       
    72 
       
    73     Class: CMenu
       
    74 
       
    75     Method: NewL
       
    76 
       
    77     Description: Constructs new menu.
       
    78 
       
    79     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
    80                 CMenu* aParent            :in:      Parent menu
       
    81                 const TDesC& aName        :in:      Menu name
       
    82 
       
    83     Return Values: CMenu*                           New menu
       
    84 
       
    85     Errors/Exceptions: Leaves if memory allocation fails
       
    86                        Leaves if ConstructL leaves.
       
    87 
       
    88     Status: Draft
       
    89 
       
    90 -------------------------------------------------------------------------------
       
    91 */
       
    92 CMenu* CMenu::NewL( CConsoleMain* aConsole,
       
    93                     CMenu* aParent,
       
    94                     const TDesC& aName
       
    95                   )
       
    96     {
       
    97 
       
    98     CMenu* self = new ( ELeave ) CMenu();
       
    99     CleanupStack::PushL( self );
       
   100     self->ConstructL( aConsole, aParent, aName );
       
   101     CleanupStack::Pop( self );
       
   102     return self;
       
   103 
       
   104     }
       
   105 
       
   106 /*
       
   107 -------------------------------------------------------------------------------
       
   108 
       
   109     Class: CMenu
       
   110 
       
   111     Method: ConstructL
       
   112 
       
   113     Description: Second level constructor.
       
   114 
       
   115     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
   116                 CMenu* aParent            :in:      Parent menu
       
   117                 const TDesC& aName        :in:      Menu name
       
   118 				const TDesC& aHeader	  :in:		Text containing STIF version info
       
   119 				
       
   120     Return Values: None
       
   121 
       
   122     Errors/Exceptions: None
       
   123 
       
   124     Status: Draft
       
   125 
       
   126 -------------------------------------------------------------------------------
       
   127 */
       
   128 void CMenu::ConstructL( CConsoleMain* aConsole,
       
   129                         CMenu* aParent,
       
   130                         const TDesC& aName,
       
   131                         const TDesC& aHeader
       
   132                       )
       
   133     {
       
   134  
       
   135     // Store the parameters
       
   136     iMain = aConsole;
       
   137     iConsole = aConsole->GetConsole();
       
   138     iParent = aParent;
       
   139     iName = aName;
       
   140     iHeader = aHeader;
       
   141 
       
   142     // Get display size
       
   143     const TInt KOverHead = 5;
       
   144     //iSize = iConsole->ScreenSize();
       
   145     iConsole->ScreenSize(iSize);
       
   146     iScreenSize = iSize.iHeight - KOverHead;   // Size available for menus
       
   147 
       
   148     }
       
   149 
       
   150 /*
       
   151 -------------------------------------------------------------------------------
       
   152 
       
   153     Class: CMenu
       
   154 
       
   155     Method: CMenu
       
   156 
       
   157     Description: Constructor
       
   158 
       
   159     Parameters: None
       
   160 
       
   161     Return Values: None
       
   162 
       
   163     Errors/Exceptions: None
       
   164 
       
   165     Status: Draft
       
   166 
       
   167 -------------------------------------------------------------------------------
       
   168 */
       
   169 CMenu::CMenu()
       
   170     {
       
   171     iDirection = 1;
       
   172     iPrevPos  = -1;     // Invalid starting value
       
   173     }
       
   174 
       
   175 /*
       
   176 -------------------------------------------------------------------------------
       
   177 
       
   178     Class: CMenu
       
   179 
       
   180     Method: ~CMenu
       
   181 
       
   182     Description: Destructor
       
   183 
       
   184     Parameters: None
       
   185 
       
   186     Return Values: None
       
   187 
       
   188     Errors/Exceptions: None
       
   189 
       
   190     Status: Draft
       
   191     
       
   192 -------------------------------------------------------------------------------
       
   193 */
       
   194 CMenu::~CMenu()
       
   195     {
       
   196     
       
   197     iItems.ResetAndDestroy();
       
   198     
       
   199     }
       
   200 
       
   201 /*
       
   202 -------------------------------------------------------------------------------
       
   203 
       
   204     Class: CMenu
       
   205 
       
   206     Method: TimerUpdate
       
   207 
       
   208     Description: TimerUpdate
       
   209 
       
   210     Parameters: None
       
   211 
       
   212     Return Values: None
       
   213 
       
   214     Errors/Exceptions: None
       
   215 
       
   216     Status: Draft
       
   217     
       
   218 -------------------------------------------------------------------------------
       
   219 */
       
   220 void CMenu::TimerUpdate()
       
   221     {    
       
   222 
       
   223     RRefArray<TDesC> texts;
       
   224     User::LeaveIfError( ItemTexts( texts ) );
       
   225     
       
   226     TInt count = texts.Count();
       
   227     // If list is empty, do not scroll.
       
   228     if ( count < 1 )
       
   229         {
       
   230         texts.Close();
       
   231         return;
       
   232         }
       
   233     
       
   234     // Recalculate visible part of menu
       
   235     Recalculate( count );
       
   236 
       
   237     // If menu selection is updated, then restart scrolling
       
   238     if (iPrevPos != iFirst + iPosOnScreen)
       
   239         {
       
   240         iPrevPos = iFirst + iPosOnScreen;
       
   241         iStart = 0;
       
   242         iDirection = 1;
       
   243         }
       
   244 
       
   245 
       
   246     // If menu item have not been changed after last timer, then
       
   247     // start scrolling  
       
   248     const TDesC& name = texts[ iFirst + iPosOnScreen ]; 
       
   249     if ( name.Length() > ( iSize.iWidth - KMenuOverhead ) )
       
   250         {
       
   251 
       
   252         //TInt y = iConsole->WhereY();
       
   253         //TInt x = iConsole->WhereX();
       
   254         TPoint cp;
       
   255         iConsole->CursorPos(cp);
       
   256         TInt y = cp.iY;
       
   257         TInt x = cp.iX;
       
   258         
       
   259         TBuf<80> iTmp;              
       
   260 
       
   261         iStart = iStart + iDirection;
       
   262 
       
   263         // "Right end"
       
   264         if ( iStart + iSize.iWidth > name.Length() + KMenuOverhead )
       
   265             {
       
   266             iStart--;
       
   267             iDirection = -1;
       
   268             }
       
   269         
       
   270         // "Left end"
       
   271         if ( iStart == -1 )
       
   272             {
       
   273             iStart++;
       
   274             iDirection = 1;
       
   275             }
       
   276         
       
   277         if( iStart > name.Length() )
       
   278             {
       
   279             iStart = 0;
       
   280             }
       
   281 
       
   282         iTmp=_L(" *");
       
   283         LimitedAppend( iTmp, name.Mid ( iStart ) );
       
   284             
       
   285         //iConsole->SetPos( 0, iPosOnScreen+1);
       
   286         TPoint p(0, iPosOnScreen+1);
       
   287         iConsole->SetCursorPosAbs( p);       
       
   288         //iConsole->Printf ( iTmp.Left( iSize.iWidth -2 )  );
       
   289         iConsole->Write ( iTmp.Left( iSize.iWidth -2 )  );
       
   290 
       
   291         //iConsole->SetPos(x,y);
       
   292         p.SetXY(x,y);
       
   293         iConsole->SetCursorPosAbs(p);
       
   294         }
       
   295     texts.Close();
       
   296 
       
   297     }
       
   298     
       
   299 
       
   300 /*
       
   301 -------------------------------------------------------------------------------
       
   302     Class: CMenu
       
   303 
       
   304     Method: AppendBefore
       
   305 
       
   306     Description: Append text before line.
       
   307 
       
   308     Parameters: TInt aLine: in: line number 
       
   309                 TDes& aLine: in: line text
       
   310 
       
   311     Return Values: None
       
   312 
       
   313     Errors/Exceptions: None
       
   314 
       
   315     Status: Draft
       
   316     
       
   317 -------------------------------------------------------------------------------
       
   318 */
       
   319 void CMenu::AppendBefore( TInt aLineNum, TDes& aLine )
       
   320     {
       
   321     
       
   322     if( ( aLine.MaxLength() - aLine.Length() ) < 2 )
       
   323         {
       
   324         return;
       
   325         }        
       
   326     
       
   327     // If printing active line, print the marker
       
   328     if ( aLineNum == iPosOnScreen + iFirst )
       
   329         {
       
   330         aLine.Append( _L(" *") );
       
   331         }
       
   332     else
       
   333         {
       
   334         aLine.Append( _L("  ") );
       
   335         }
       
   336         
       
   337     }
       
   338 
       
   339 /*
       
   340 -------------------------------------------------------------------------------
       
   341     Class: CMenu
       
   342 
       
   343     Method: PrintMenuL
       
   344 
       
   345     Description: Prints the menu
       
   346 
       
   347     Parameters: None
       
   348 
       
   349     Return Values: None
       
   350 
       
   351     Errors/Exceptions: None
       
   352 
       
   353     Status: Draft
       
   354     
       
   355 -------------------------------------------------------------------------------
       
   356 */
       
   357 void CMenu::PrintMenuL( TUpdateType aType )
       
   358     {
       
   359 
       
   360     iUpdateType = aType;
       
   361     
       
   362     TBuf<KMaxLineLength> line;
       
   363 
       
   364     // Clear display
       
   365     iConsole->ClearScreen();
       
   366     
       
   367     //Print STIF version information, only when defined (i.e. in main menu)
       
   368     if(iHeader != _L(""))
       
   369     	Print(iHeader);
       
   370 
       
   371     // Print menu title
       
   372     Print( Name() );
       
   373             
       
   374     RRefArray<TDesC> texts;
       
   375     User::LeaveIfError( ItemTexts( texts ) );
       
   376     
       
   377     // Recalculate visible part of menu
       
   378     Recalculate( texts.Count() );
       
   379     
       
   380     // Print items
       
   381     for ( TInt i = iFirst; i <= iLast; i++ )
       
   382         {
       
   383         line.Zero();
       
   384         
       
   385         // Append text before line
       
   386         AppendBefore( i, line );
       
   387 
       
   388         // Get the menu line
       
   389         LimitedAppend ( line, texts[i] );
       
   390 
       
   391         // Print the line
       
   392         Print(line);
       
   393 
       
   394         }
       
   395     texts.Close();
       
   396 
       
   397     }
       
   398 
       
   399 
       
   400 /*
       
   401 -------------------------------------------------------------------------------
       
   402 
       
   403     Class: CMenu
       
   404 
       
   405     Method: SelectL
       
   406 
       
   407     Description: Process keypresses in menu. Either updates position in
       
   408     menu or returns new menu.
       
   409 
       
   410     Parameters: TKeyCode aSelection       :in:      Key
       
   411                 TBool& aContinue          :out:     Has user pressed "Quit"
       
   412 
       
   413     Return Values: CMenu*                           New menu
       
   414 
       
   415     Errors/Exceptions: None
       
   416 
       
   417     Status: Draft
       
   418 
       
   419 -------------------------------------------------------------------------------
       
   420 */
       
   421 CMenu* CMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
   422     {
       
   423 
       
   424     MapKeyCode(aSelection);
       
   425     
       
   426     switch ( (TInt) aSelection )
       
   427     {
       
   428 
       
   429     // Exit
       
   430     case EKeyEscape:
       
   431         aContinue = EFalse;
       
   432         return this;
       
   433     // SelectL item
       
   434     case EKeyEnter:
       
   435     case EKeyRightArrow:
       
   436         return iItems[iPosOnScreen];
       
   437 
       
   438     // Going back
       
   439     case EKeyLeftArrow:
       
   440         return iParent;
       
   441 
       
   442     // Go down
       
   443     case EKeyDownArrow:
       
   444         {
       
   445         if ( iFirst + iPosOnScreen == iItemCount - 1 )
       
   446             {
       
   447             // If end of the list, go to beginning
       
   448             iPosOnScreen = 0;
       
   449             iFirst = 0;
       
   450             iLast = iScreenSize;
       
   451             if ( iLast > iItemCount - 1 )
       
   452             	{
       
   453             	iLast = iItemCount - 1;
       
   454             	}
       
   455             }
       
   456         else 
       
   457             {
       
   458             if ( iPosOnScreen == iScreenSize )
       
   459                 {
       
   460                 iLast++;
       
   461                 iFirst++;
       
   462                 }
       
   463             else
       
   464                 {
       
   465                 // Going down "in-screen", no need to update items
       
   466                 iPosOnScreen++;
       
   467                 }
       
   468             }
       
   469         break;
       
   470         }
       
   471         
       
   472     // Go Up
       
   473     case EKeyUpArrow:
       
   474         {
       
   475         if ( iFirst + iPosOnScreen == 0 )
       
   476             {
       
   477             // If in the beginning of the list
       
   478 
       
   479             if(iItemCount > 0)
       
   480                 {
       
   481                 iLast = iItemCount - 1;
       
   482                 iFirst = iLast - iScreenSize;
       
   483                 if ( iFirst < 0 )
       
   484                 	{
       
   485                 	iFirst = 0;            	
       
   486                 	}
       
   487                 iPosOnScreen = iLast - iFirst;
       
   488                 }
       
   489             }
       
   490         else if ( iPosOnScreen == 0 )
       
   491             {
       
   492             iLast--;
       
   493             iFirst--;
       
   494             }
       
   495         else
       
   496             {
       
   497             iPosOnScreen--;
       
   498             }
       
   499         
       
   500         break;
       
   501         }
       
   502 
       
   503     // Additional keys
       
   504     case EKeyHome:
       
   505     case '3':
       
   506         iPosOnScreen = 0;
       
   507         iFirst = 0;
       
   508         iLast = iScreenSize;
       
   509 
       
   510         if ( iLast > iItemCount - 1 )
       
   511             {
       
   512             iLast = iItemCount - 1;
       
   513             }
       
   514         break;
       
   515 
       
   516     case EKeyEnd:
       
   517     case '9':
       
   518         iLast = iItemCount - 1;
       
   519         iFirst = iLast - iScreenSize;
       
   520 
       
   521         if ( iFirst < 0 )
       
   522             {
       
   523             iFirst = 0;
       
   524             }
       
   525         iPosOnScreen = iLast - iFirst;        
       
   526         break;
       
   527 
       
   528     case EKeyPageUp:
       
   529     case '1':
       
   530 
       
   531         iFirst = iFirst - iScreenSize;
       
   532         iLast = iLast - iScreenSize;
       
   533 
       
   534         if ( iFirst < 0 )
       
   535             {
       
   536             iFirst = 0;
       
   537             iPosOnScreen = 0;           
       
   538             iLast = iScreenSize;
       
   539             if ( iLast > iItemCount - 1 )
       
   540                 {
       
   541                 iLast = iItemCount - 1;
       
   542                 }
       
   543             }
       
   544         break;
       
   545 
       
   546     case EKeyPageDown:
       
   547     case '7':
       
   548         iFirst = iFirst + iScreenSize;
       
   549         iLast = iLast + iScreenSize;
       
   550 
       
   551         // Going too far
       
   552         if ( iLast > iItemCount - 1 )
       
   553             {
       
   554             iLast = iItemCount - 1;
       
   555             iFirst = iLast - iScreenSize;
       
   556             if ( iFirst < 0 )
       
   557                 {
       
   558                 iFirst = 0;
       
   559                 }
       
   560             }
       
   561         iPosOnScreen = iLast - iFirst;
       
   562         break;
       
   563     default:  // Bypass the keypress
       
   564         break;
       
   565     }
       
   566 
       
   567     // Continue normally and keep in the same menu
       
   568     aContinue = ETrue;
       
   569     return this;
       
   570 
       
   571     }
       
   572 
       
   573 /*
       
   574 -------------------------------------------------------------------------------
       
   575 
       
   576     Class: CMenu
       
   577 
       
   578     Method: ItemText
       
   579 
       
   580     Description: Returns menu item text
       
   581 
       
   582     Parameters: const TInt                :in:      Menu index
       
   583 
       
   584     Return Values: const TDesC&                     Menu line text
       
   585 
       
   586     Errors/Exceptions: None
       
   587 
       
   588     Status: Draft
       
   589 
       
   590 -------------------------------------------------------------------------------
       
   591 */
       
   592 TInt CMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
   593     {
       
   594     
       
   595     TInt count = iItems.Count();
       
   596     for( TInt i=0; i<count; i++ )
       
   597         {
       
   598         if( aArray.Append( iItems[i]->Name() ) != KErrNone )
       
   599             {
       
   600             return KErrNoMemory;
       
   601             }
       
   602         }
       
   603 
       
   604     return KErrNone;
       
   605 
       
   606     }
       
   607     
       
   608 /*
       
   609 -------------------------------------------------------------------------------
       
   610 
       
   611     Class: CMenu
       
   612 
       
   613     Method: SetParent
       
   614 
       
   615     Description: Sets menu parent menu.
       
   616 
       
   617     Parameters: CMenu* aMenu              :in:      Menu parent
       
   618 
       
   619     Return Values: None
       
   620 
       
   621     Errors/Exceptions: None
       
   622 
       
   623     Status: Draft
       
   624 
       
   625 -------------------------------------------------------------------------------
       
   626 */
       
   627 void CMenu::SetParent ( CMenu* aMenu )
       
   628     {
       
   629 
       
   630     iParent = aMenu;
       
   631 
       
   632     }
       
   633 
       
   634 /*
       
   635 -------------------------------------------------------------------------------
       
   636 
       
   637     Class: CMenu
       
   638 
       
   639     Method: Print
       
   640 
       
   641     Description: Prints one line text and changes to next line. If line is
       
   642     too long, overhead is not printed..
       
   643 
       
   644     Parameters: None
       
   645 
       
   646     Return Values: None
       
   647 
       
   648     Errors/Exceptions: None
       
   649 
       
   650     Status: Draft
       
   651     
       
   652 -------------------------------------------------------------------------------
       
   653 */
       
   654 void CMenu::Print( const TDesC& aPrint )
       
   655     {
       
   656     
       
   657     //iConsole->Printf ( aPrint.Left( iSize.iWidth - KMenuOverhead ) );
       
   658     iConsole->Write ( aPrint.Left( iSize.iWidth - KMenuOverhead ) );
       
   659     //iConsole->Printf(_L("\n"));
       
   660     iConsole->Write(_L("\r\n"));
       
   661 
       
   662     }
       
   663 
       
   664 /*
       
   665 -------------------------------------------------------------------------------
       
   666 
       
   667     Class: CMenu
       
   668 
       
   669     Method: PrintMulti
       
   670 
       
   671     Description: Prints text. If line is too long, it will be continued to
       
   672     following lines.
       
   673 
       
   674     Parameters: const TDesC& aPrint       :in:      Text to print
       
   675 
       
   676     Return Values: None
       
   677 
       
   678     Errors/Exceptions: None
       
   679 
       
   680     Status: Draft
       
   681 
       
   682 -------------------------------------------------------------------------------
       
   683 */
       
   684 void CMenu::PrintMulti( const TDesC& aPrint )
       
   685     {
       
   686 
       
   687     // Get current line
       
   688     const TInt KMenuOverHead = 2;
       
   689     //TInt y = iConsole->WhereY();
       
   690     TPoint cp;
       
   691     iConsole->CursorPos(cp);
       
   692     TInt y = cp.iY;
       
   693 
       
   694 
       
   695     const TInt KLineLen =iSize.iWidth -4;
       
   696     TBuf<KMaxLineLength+1> oneLine;
       
   697 
       
   698     // Loop through the line
       
   699     for (TInt i = 0; i < aPrint.Length(); i++)
       
   700         {
       
   701         oneLine.Append( aPrint[i] );
       
   702 
       
   703         // Print one line
       
   704         if (oneLine.Length() == KLineLen )
       
   705             {
       
   706             oneLine.Append (_L("\r\n"));
       
   707             //iConsole->Printf(oneLine);
       
   708             iConsole->Write(oneLine);
       
   709             oneLine=_L("");
       
   710             y++;
       
   711             }
       
   712     
       
   713         // Prevent display scrolling
       
   714         if ( y == iScreenSize + KMenuOverHead )
       
   715             {
       
   716             oneLine=_L("");
       
   717             break;
       
   718             }
       
   719         }
       
   720 
       
   721     // Print last part if required
       
   722     if ( oneLine.Length() != 0 )
       
   723         {
       
   724         oneLine.Append (_L("\r\n"));
       
   725         //iConsole->Printf(oneLine);
       
   726         iConsole->Write(oneLine);
       
   727         }
       
   728 
       
   729     }
       
   730 
       
   731 /*
       
   732 -------------------------------------------------------------------------------
       
   733 
       
   734     Class: CMenu
       
   735 
       
   736     Method: AddItem
       
   737 
       
   738     Description: Add new item to menu
       
   739 
       
   740     Parameters: CMenu* aMenu              :in:      Menu to be added
       
   741 
       
   742     Return Values: None
       
   743 
       
   744     Errors/Exceptions: Leaves if can't add item to menu
       
   745 
       
   746     Status: Draft
       
   747 
       
   748 -------------------------------------------------------------------------------
       
   749 */
       
   750 void CMenu::AddItemL( CMenu* aMenu )
       
   751     {
       
   752 
       
   753     User::LeaveIfError ( iItems.Append (aMenu) );
       
   754     
       
   755     }
       
   756 
       
   757 
       
   758 /*
       
   759 -------------------------------------------------------------------------------
       
   760 
       
   761     Class: CMenu
       
   762 
       
   763     Method: Name
       
   764 
       
   765     Description: Returns menu name
       
   766 
       
   767     Parameters: None
       
   768 
       
   769     Return Values: const TDesC&                     Menu name
       
   770 
       
   771     Errors/Exceptions: None
       
   772 
       
   773     Status: Draft
       
   774 
       
   775 -------------------------------------------------------------------------------
       
   776 */
       
   777 const TDesC& CMenu::Name( ) const
       
   778     {
       
   779 
       
   780     return iName;
       
   781 
       
   782     }
       
   783 
       
   784 /*
       
   785 -------------------------------------------------------------------------------
       
   786 
       
   787     Class: CMenu
       
   788 
       
   789     Method: MapKeyCode
       
   790 
       
   791     Description: Maps numeric keycodes to proper TKeyCode values
       
   792 
       
   793     Parameters: TKeyCode 
       
   794 
       
   795     Return Values: None
       
   796 
       
   797     Errors/Exceptions: None
       
   798 
       
   799     Status: Draft
       
   800 
       
   801 -------------------------------------------------------------------------------
       
   802 */
       
   803 
       
   804 void CMenu::MapKeyCode(TKeyCode &aSelection)
       
   805     {
       
   806     
       
   807     TInt asciiCode = (TInt) aSelection;
       
   808     
       
   809     // Handling numeric keys 2,4,6 and 8
       
   810     
       
   811     if(asciiCode == KMyKeyUpAsciiCode)
       
   812         {
       
   813         aSelection = EKeyUpArrow;
       
   814         }
       
   815         
       
   816     if(asciiCode == KMyKeyLeftAsciiCode)
       
   817         {
       
   818         aSelection = EKeyLeftArrow;
       
   819         }
       
   820 
       
   821     if(asciiCode == KMyKeyRightAsciiCode)
       
   822         {
       
   823         aSelection = EKeyEnter;
       
   824         }
       
   825 
       
   826     if(asciiCode == KMyKeyDownAsciiCode)
       
   827         {
       
   828         aSelection = EKeyDownArrow;
       
   829         }
       
   830     }
       
   831     
       
   832 /*
       
   833 -------------------------------------------------------------------------------
       
   834 
       
   835     Class: CMenu
       
   836 
       
   837     Method: Recalculate
       
   838 
       
   839     Description: Recalculates visible menu elements
       
   840 
       
   841     Parameters: TInt aItemCount    :in:      Menu items count
       
   842 
       
   843     Return Values: None
       
   844 
       
   845     Errors/Exceptions: None
       
   846 
       
   847     Status: Approved
       
   848 
       
   849 -------------------------------------------------------------------------------
       
   850 */
       
   851 void CMenu::Recalculate( TInt aItemCount )
       
   852 	{    
       
   853     TInt oldItemCount = iItemCount;
       
   854      
       
   855     iItemCount = aItemCount;
       
   856  
       
   857     // If first time in menu, update start and end positions
       
   858     if ( ( iFirst == 0 ) && ( iLast == 0 ) || (iItemCount == 0)) //if there are no items, update start and end positions too
       
   859     	{
       
   860     	if ( iItemCount - 1 > iScreenSize  )
       
   861     		{
       
   862     		iLast = iScreenSize;
       
   863     		}
       
   864     	else
       
   865     		{
       
   866     		iLast = iItemCount - 1;
       
   867     		}
       
   868     	iPosOnScreen = 0;
       
   869     	}
       
   870     // New menu entry added, update last visible element if needed
       
   871     else if ( oldItemCount < iItemCount )
       
   872     	{
       
   873     	if ( iFirst + iScreenSize < iItemCount )
       
   874     		{
       
   875     		iLast = iFirst + iScreenSize;
       
   876     		}
       
   877     	else
       
   878     		{
       
   879     		iLast = iItemCount - 1;
       
   880     		}
       
   881     	}
       
   882     // Menu entry removed, update last visible element if needed
       
   883     else if ( oldItemCount > iItemCount )
       
   884     	{
       
   885     	if ( iFirst + iScreenSize < iItemCount )
       
   886     		{
       
   887     		iLast = iFirst + iScreenSize;
       
   888     		}
       
   889     	else if ( iFirst > iItemCount - 1 )
       
   890     		{
       
   891     		iFirst = iItemCount - 1 - iScreenSize;
       
   892     		if ( iFirst < 0 )
       
   893     			{
       
   894     			iFirst = 0;
       
   895     			}
       
   896     		iLast = iItemCount - 1;
       
   897     		iPosOnScreen = iFirst - iLast;
       
   898     		}
       
   899     	else
       
   900     		{
       
   901     		iLast = iItemCount - 1;
       
   902     		}
       
   903     	
       
   904     	if ( iFirst + iPosOnScreen > iLast )
       
   905     		{
       
   906     		iPosOnScreen = iLast - iFirst;
       
   907     		}
       
   908     	}	
       
   909 	}
       
   910 
       
   911 /*
       
   912 -------------------------------------------------------------------------------
       
   913 
       
   914     Class: CFileNameQueryView
       
   915 
       
   916     Method: NewL
       
   917 
       
   918     Description: Constructs new menu.
       
   919 
       
   920     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
   921                 CMenu* aParent            :in:      Parent menu
       
   922                 const TDesC& aName        :in:      Menu name
       
   923 
       
   924     Return Values: CMenu*                           New menu
       
   925 
       
   926     Errors/Exceptions: Leaves if memory allocation fails
       
   927                        Leaves if ConstructL leaves.
       
   928 
       
   929     Status: Draft
       
   930 
       
   931 -------------------------------------------------------------------------------
       
   932 */
       
   933 CFileNameQueryView* CFileNameQueryView::NewL( CConsoleMain* aConsole,
       
   934                                               CMenu* aParent,
       
   935                                               const TDesC& aName )
       
   936     {
       
   937 
       
   938     CFileNameQueryView* self = new ( ELeave ) CFileNameQueryView();
       
   939     CleanupStack::PushL( self );
       
   940     self->ConstructL( aConsole, aParent, aName );
       
   941     CleanupStack::Pop( self );
       
   942     return self;
       
   943     
       
   944     }
       
   945 
       
   946 /*
       
   947 -------------------------------------------------------------------------------
       
   948 
       
   949     Class: CFileNameQueryView
       
   950 
       
   951     Method: ConstructL
       
   952 
       
   953     Description: Second level constructor.
       
   954 
       
   955     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
   956                 CMenu* aParent            :in:      Parent menu
       
   957                 const TDesC& aName        :in:      Menu name
       
   958 
       
   959     Return Values: None
       
   960 
       
   961     Errors/Exceptions: None
       
   962 
       
   963     Status: Draft
       
   964 
       
   965 -------------------------------------------------------------------------------
       
   966 */
       
   967 void CFileNameQueryView::ConstructL( CConsoleMain* aConsole, 
       
   968                                      CMenu* aParent, 
       
   969                                      const TDesC& aName 
       
   970                                     )
       
   971     {
       
   972 
       
   973     CMenu::ConstructL( aConsole, aParent, aName);
       
   974 
       
   975     }
       
   976 
       
   977 /*
       
   978 -------------------------------------------------------------------------------
       
   979 
       
   980     Class: CFileNameQueryView
       
   981 
       
   982     Method: ~CFileNameQueryView
       
   983 
       
   984     Description: Destructor
       
   985 
       
   986     Parameters: None
       
   987 
       
   988     Return Values: None
       
   989 
       
   990     Errors/Exceptions: None
       
   991 
       
   992     Status: Draft
       
   993     
       
   994 -------------------------------------------------------------------------------
       
   995 */
       
   996 CFileNameQueryView::~CFileNameQueryView()
       
   997     {
       
   998 
       
   999     iTestModuleNames.ResetAndDestroy();
       
  1000     iTestModuleNames.Close();
       
  1001     
       
  1002     }
       
  1003     
       
  1004 /*
       
  1005 -------------------------------------------------------------------------------
       
  1006 
       
  1007     Class: CFileNameQueryView
       
  1008 
       
  1009     Method: ItemText
       
  1010 
       
  1011     Description: Returns menu item text.
       
  1012 
       
  1013     Parameters: const TInt                :in:      Menu index
       
  1014 
       
  1015     Return Values: const TDesC&                     Menu line text
       
  1016 
       
  1017     Errors/Exceptions: None
       
  1018 
       
  1019     Status: Draft
       
  1020 
       
  1021 -------------------------------------------------------------------------------
       
  1022 */
       
  1023 TInt CFileNameQueryView::ItemTexts( RRefArray<TDesC>& aArray )
       
  1024     {
       
  1025     
       
  1026     iTestModuleNames.ResetAndDestroy();    
       
  1027     
       
  1028     // Add loaded module names to menu
       
  1029     TInt ret = iMain->UIStore().ListAllModules( iTestModuleNames );
       
  1030 
       
  1031     if( ret != KErrNone )
       
  1032         {                 
       
  1033         return ret;
       
  1034         }
       
  1035         
       
  1036     TInt count = iTestModuleNames.Count();
       
  1037     for( TInt i=0; i<count; i++ )
       
  1038         {
       
  1039         if( aArray.Append( *iTestModuleNames[i] ) != KErrNone )
       
  1040             {
       
  1041             return KErrNoMemory;
       
  1042             }
       
  1043         }
       
  1044 
       
  1045     return KErrNone; 
       
  1046 
       
  1047     }
       
  1048 
       
  1049 /*
       
  1050 -------------------------------------------------------------------------------
       
  1051 
       
  1052     Class: CFileNameQueryView
       
  1053 
       
  1054     Method: SelectL
       
  1055 
       
  1056     Description: Process keypresses in menu. Just return the parent menu
       
  1057 
       
  1058     Parameters: TKeyCode aSelection       :in:      Not used
       
  1059                 TBool& aContinue          :out:     Has user pressed "Quit"?
       
  1060 
       
  1061     Return Values: CMenu*                           New menu
       
  1062 
       
  1063     Errors/Exceptions: None
       
  1064 
       
  1065     Status: Draft
       
  1066 
       
  1067 -------------------------------------------------------------------------------
       
  1068 */
       
  1069 CMenu* CFileNameQueryView::SelectL( TKeyCode aSelection, 
       
  1070                                     TBool& aContinue )
       
  1071     {  
       
  1072     
       
  1073     MapKeyCode(aSelection);
       
  1074 
       
  1075     if (aSelection == EKeyEnter || aSelection == EKeyRightArrow )
       
  1076         {
       
  1077         if( iPosOnScreen < iTestModuleNames.Count() )
       
  1078             {
       
  1079             TInt ret = 
       
  1080                 iMain->UIStore().AddTestModule( *iTestModuleNames[iPosOnScreen] );
       
  1081             if( ret != KErrNone )
       
  1082                 {
       
  1083                 TErrorNotification error;
       
  1084                 error.iModule.Copy( _L("ConsoleUI") );
       
  1085                 error.iText.Copy( _L("Failed to load test module ") );
       
  1086                 error.iText.Append( *iTestModuleNames[iPosOnScreen] );
       
  1087                 error.iText.Append( _L(" error "));
       
  1088                 error.iText.AppendNum( ret );
       
  1089                 iMain->Error( error );
       
  1090                 }
       
  1091             return iParent;
       
  1092             }
       
  1093         else
       
  1094             {
       
  1095             return this;
       
  1096             }
       
  1097         }  
       
  1098 
       
  1099     return CMenu::SelectL( aSelection, aContinue );
       
  1100 
       
  1101     }
       
  1102 
       
  1103 
       
  1104 /*
       
  1105 -------------------------------------------------------------------------------
       
  1106 
       
  1107     Class: CMainMenu
       
  1108 
       
  1109     Method: NewL
       
  1110 
       
  1111     Description: Constructs new menu.
       
  1112 
       
  1113     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  1114                 CMenu* aParent            :in:      Parent menu
       
  1115                 const TDesC& aName        :in:      Menu name
       
  1116                 const TDesC& aHeader	  :in:		Text containing STIF version information
       
  1117 
       
  1118     Return Values: CMenu*                           New menu
       
  1119 
       
  1120     Errors/Exceptions: Leaves if memory allocation fails
       
  1121                        Leaves if ConstructL leaves.
       
  1122 
       
  1123     Status: Draft
       
  1124 
       
  1125 -------------------------------------------------------------------------------
       
  1126 */
       
  1127 CMainMenu* CMainMenu::NewL( CConsoleMain* aConsole,
       
  1128                             CMenu* aParent,
       
  1129                             const TDesC& aName,
       
  1130                             const TDesC& aHeader)
       
  1131     {
       
  1132 
       
  1133     CMainMenu* self = new ( ELeave ) CMainMenu();
       
  1134     CleanupStack::PushL( self );
       
  1135     self->ConstructL( aConsole, aParent, aName, aHeader );
       
  1136     CleanupStack::Pop( self );
       
  1137     return self;
       
  1138 
       
  1139     }
       
  1140 
       
  1141 /*
       
  1142 -------------------------------------------------------------------------------
       
  1143 
       
  1144     CMainMenu
       
  1145 
       
  1146     Method: ~CMainMenu
       
  1147 
       
  1148     Description: Destructor
       
  1149 
       
  1150     Parameters: None
       
  1151 
       
  1152     Return Values: None
       
  1153 
       
  1154     Errors/Exceptions: None
       
  1155 
       
  1156     Status: Draft
       
  1157 
       
  1158 -------------------------------------------------------------------------------
       
  1159 */
       
  1160 CMainMenu::~CMainMenu()
       
  1161     {
       
  1162     delete iOutputView;
       
  1163     iOutputView = NULL;
       
  1164     delete iOperationMenu;
       
  1165     iOperationMenu = NULL;
       
  1166     }
       
  1167 
       
  1168 /*
       
  1169 -------------------------------------------------------------------------------
       
  1170 
       
  1171     Class: CMainMenu
       
  1172 
       
  1173     Method: ItemText
       
  1174 
       
  1175     Description: Returns menu item text. Add "Exit" to normal SelectLion
       
  1176 
       
  1177     Parameters: const TInt                :in:      Menu index
       
  1178 
       
  1179     Return Values: const TDesC&                     Menu line text
       
  1180 
       
  1181     Errors/Exceptions: None
       
  1182 
       
  1183     Status: Draft
       
  1184 
       
  1185 -------------------------------------------------------------------------------
       
  1186 */
       
  1187 TInt CMainMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  1188     {
       
  1189     
       
  1190     TInt ret = CMenu::ItemTexts( aArray );
       
  1191     if ( ret != KErrNone )
       
  1192     	{
       
  1193     	return ret;
       
  1194     	}
       
  1195     // Add Exit to last one in menu
       
  1196     if( aArray.Append( KExitTxt ) != KErrNone )
       
  1197         {
       
  1198         return KErrNoMemory;
       
  1199         }
       
  1200 
       
  1201     return KErrNone;
       
  1202     }
       
  1203 
       
  1204 /*
       
  1205 -------------------------------------------------------------------------------
       
  1206 
       
  1207     Class: CMainMenu
       
  1208 
       
  1209     Method: ConstructL
       
  1210 
       
  1211     Description: Second level constructor.
       
  1212 
       
  1213     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  1214                 CMenu* aParent            :in:      Parent menu
       
  1215                 const TDesC& aName        :in:      Menu name
       
  1216                 const TDesC& aHeader	  :in:		Text containing STIF version information
       
  1217 
       
  1218     Return Values: None
       
  1219 
       
  1220     Errors/Exceptions: None
       
  1221 
       
  1222     Status: Draft
       
  1223 
       
  1224 -------------------------------------------------------------------------------
       
  1225 */
       
  1226 void CMainMenu::ConstructL( CConsoleMain* aConsole, 
       
  1227                             CMenu* aParent,
       
  1228                             const TDesC& aName,
       
  1229                             const TDesC& aHeader
       
  1230                           )
       
  1231     {
       
  1232     CMenu::ConstructL( aConsole, aParent, aName, aHeader);
       
  1233     iOutputView = NULL;
       
  1234     iOperationMenu = NULL;
       
  1235     }
       
  1236 
       
  1237 /*
       
  1238 -------------------------------------------------------------------------------
       
  1239 
       
  1240     Class: CMainMenu
       
  1241 
       
  1242     Method: SelectL
       
  1243 
       
  1244     Description: Process keypresses in menu. Handle SelectLion in this
       
  1245     method, other keys are handles in CMenu class.
       
  1246 
       
  1247     Parameters: TKeyCode aSelection       :in:      Key
       
  1248                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  1249 
       
  1250     Return Values: CMenu*                           New menu
       
  1251 
       
  1252     Errors/Exceptions: None
       
  1253 
       
  1254     Status: Draft
       
  1255 
       
  1256 -------------------------------------------------------------------------------
       
  1257 */
       
  1258 CMenu* CMainMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  1259     {
       
  1260 
       
  1261     MapKeyCode(aSelection);
       
  1262     
       
  1263     // If SelectLion == "exit" and right or enter
       
  1264     if (aSelection == EKeyEnter || aSelection == EKeyRightArrow )
       
  1265         {
       
  1266         if ( iPosOnScreen == iItemCount-1 )
       
  1267             {
       
  1268             // Exit
       
  1269             aContinue = EFalse;
       
  1270             return this;
       
  1271             }
       
  1272         }
       
  1273 
       
  1274     // Normal menu handling
       
  1275     CMenu* tmp = CMenu::SelectL(aSelection, aContinue);
       
  1276     return tmp;
       
  1277 
       
  1278     }
       
  1279 
       
  1280 /*
       
  1281 -------------------------------------------------------------------------------
       
  1282 
       
  1283     Class: CMainMenu
       
  1284 
       
  1285     Method: CreateOutputViewL
       
  1286 
       
  1287     Description: Creates test case output view.
       
  1288 
       
  1289     Parameters: CMenu* aParent: parent menu for case operation menu
       
  1290 
       
  1291     Return Values: CMenu*        New menu
       
  1292 
       
  1293     Errors/Exceptions: Leaves is CCaseExecutionView menu leaves during creation
       
  1294 
       
  1295     Status: Draft
       
  1296 
       
  1297 -------------------------------------------------------------------------------
       
  1298 */
       
  1299 CMenu* CMainMenu::CreateOutputViewL(CMenu* aParent)
       
  1300     {
       
  1301     // Get test cases that have been run
       
  1302     RRefArray<CStartedTestCase> startedTestCases;
       
  1303     CleanupClosePushL(startedTestCases);
       
  1304     CMenu* res = NULL;
       
  1305 
       
  1306     startedTestCases.Reset();
       
  1307     if(iMain->UIStore().StartedTestCases(startedTestCases, CUIStoreIf::EStatusAll) == KErrNone)
       
  1308         {                 
       
  1309         TInt count = startedTestCases.Count();
       
  1310         if(count > 0)
       
  1311             {
       
  1312             // Create menu with execution info
       
  1313             const CStartedTestCase* caseContainer = &startedTestCases[count - 1];
       
  1314             delete iOutputView;
       
  1315             iOutputView = NULL;
       
  1316             delete iOperationMenu;
       
  1317             iOperationMenu = NULL;
       
  1318 
       
  1319             iOperationMenu = CCaseOperationMenu::NewL(iMain,
       
  1320                                                       aParent, //back to parent menu
       
  1321                                                       caseContainer->TestInfo().TestCaseTitle(),
       
  1322                                                       caseContainer
       
  1323                                                      );
       
  1324 
       
  1325             iOutputView = CCaseExecutionView::NewL(iMain,
       
  1326                                                    iOperationMenu, //back to Case Operation Menu
       
  1327                                                    caseContainer->TestInfo().TestCaseTitle(),
       
  1328                                                    caseContainer
       
  1329                                                   );
       
  1330             res = iOutputView;
       
  1331             }
       
  1332         }
       
  1333         
       
  1334     CleanupStack::PopAndDestroy(&startedTestCases);
       
  1335     return res;
       
  1336     }
       
  1337 
       
  1338 /*
       
  1339 -------------------------------------------------------------------------------
       
  1340 
       
  1341     Class: CModuleListView
       
  1342 
       
  1343     Method: NewL
       
  1344 
       
  1345     Description: Constructs new menu.
       
  1346 
       
  1347     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  1348                 CMenu* aParent            :in:      Parent menu
       
  1349                 const TDesC& aName        :in:      Menu name
       
  1350 
       
  1351     Return Values: CMenu*                           New menu
       
  1352 
       
  1353     Errors/Exceptions: Leaves if memory allocation fails
       
  1354                        Leaves if ConstructL leaves.
       
  1355 
       
  1356     Status: Draft
       
  1357 
       
  1358 -------------------------------------------------------------------------------
       
  1359 */
       
  1360 CModuleListView* CModuleListView::NewL( CConsoleMain* aConsole,
       
  1361                                         CMenu* aParent,
       
  1362                                         const TDesC& aName )
       
  1363     {    
       
  1364 
       
  1365     CModuleListView* self = new ( ELeave ) CModuleListView();
       
  1366     CleanupStack::PushL( self );
       
  1367     self->ConstructL( aConsole, aParent, aName );
       
  1368     CleanupStack::Pop( self );
       
  1369     return self;
       
  1370     
       
  1371     }
       
  1372 /*
       
  1373 -------------------------------------------------------------------------------
       
  1374 
       
  1375     Class: CModuleListView
       
  1376 
       
  1377     Method: ~CModuleListView
       
  1378 
       
  1379     Description: Destructor
       
  1380 
       
  1381     Parameters: None
       
  1382 
       
  1383     Return Values: None
       
  1384 
       
  1385     Errors/Exceptions: None
       
  1386 
       
  1387     Status: Draft
       
  1388     
       
  1389 -------------------------------------------------------------------------------
       
  1390 */
       
  1391 CModuleListView::~CModuleListView()
       
  1392     {
       
  1393     delete iModuleAdd;
       
  1394     }
       
  1395 
       
  1396 /*
       
  1397 -------------------------------------------------------------------------------
       
  1398 
       
  1399     Class: CModuleListView
       
  1400 
       
  1401     Method: ConstructL
       
  1402 
       
  1403     Description: Second level constructor. 
       
  1404 
       
  1405     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  1406                 CMenu* aParent            :in:      Parent menu
       
  1407                 const TDesC& aName        :in:      Menu name
       
  1408 
       
  1409     Return Values: None
       
  1410 
       
  1411     Errors/Exceptions: Leaves if parent class ConstructL leaves
       
  1412                        Leaves if module can't be appended to list
       
  1413 
       
  1414     Status: Draft
       
  1415 
       
  1416 -------------------------------------------------------------------------------
       
  1417 */
       
  1418 void CModuleListView::ConstructL( CConsoleMain* aConsole,
       
  1419                                   CMenu* aParent,
       
  1420                                   const TDesC& aName
       
  1421                                  )
       
  1422     {
       
  1423 
       
  1424     CMenu::ConstructL( aConsole, aParent, aName);
       
  1425    
       
  1426     // Construct module menu
       
  1427     iModuleAdd  = CFileNameQueryView::NewL ( iMain, this, KSelectMenuTxt );    
       
  1428 
       
  1429     }
       
  1430 
       
  1431 /*
       
  1432 -------------------------------------------------------------------------------
       
  1433 
       
  1434     Class: CModuleListView
       
  1435 
       
  1436     Method: ItemText
       
  1437 
       
  1438     Description: Returns menu item text.
       
  1439 
       
  1440     Parameters: const TInt                :in:      Menu index
       
  1441 
       
  1442     Return Values: const TDesC&                     Menu line text
       
  1443 
       
  1444     Errors/Exceptions: None
       
  1445 
       
  1446     Status: Draft
       
  1447 
       
  1448 -------------------------------------------------------------------------------
       
  1449 */
       
  1450 TInt CModuleListView::ItemTexts( RRefArray<TDesC>& aArray )
       
  1451     {
       
  1452     // Add also "Add module" text
       
  1453     if( aArray.Append( KAddMenuTxt ) != KErrNone )
       
  1454         {
       
  1455         return KErrNoMemory;
       
  1456         }
       
  1457     if( aArray.Append( KLoadMenuTxt ) != KErrNone )
       
  1458         {
       
  1459         return KErrNoMemory;
       
  1460         } 
       
  1461         
       
  1462     return KErrNone; 
       
  1463 
       
  1464     }
       
  1465 
       
  1466 /*
       
  1467 -------------------------------------------------------------------------------
       
  1468     Class: CModuleListView
       
  1469 
       
  1470     Method: PrintMenuL
       
  1471 
       
  1472     Description: Prints the menu
       
  1473 
       
  1474     Parameters: None
       
  1475 
       
  1476     Return Values: None
       
  1477 
       
  1478     Errors/Exceptions: None
       
  1479 
       
  1480     Status: Draft
       
  1481     
       
  1482 -------------------------------------------------------------------------------
       
  1483 */
       
  1484 void CModuleListView::PrintMenuL( TUpdateType aType )
       
  1485     {
       
  1486     
       
  1487     // Get module names
       
  1488     RRefArray<TDesC> modules;
       
  1489     TInt ret = iMain->UIStore().Modules( modules );
       
  1490 
       
  1491     CMenu::PrintMenuL( aType );
       
  1492     
       
  1493     // Add loaded module names to menu
       
  1494     if( ret != KErrNone )
       
  1495         {
       
  1496         modules.Reset();
       
  1497         modules.Close();
       
  1498         return;
       
  1499         }
       
  1500         
       
  1501     TBuf<KMaxLineLength> line;
       
  1502     TInt count = modules.Count();
       
  1503     for( TInt i=0; i<count; i++ )
       
  1504         {
       
  1505         line = _L("    ");
       
  1506         LimitedAppend ( line, modules[i] );
       
  1507 
       
  1508         // Print the line
       
  1509         Print(line);
       
  1510         }
       
  1511     modules.Reset();
       
  1512     modules.Close();
       
  1513     
       
  1514     }
       
  1515     
       
  1516 /*
       
  1517 -------------------------------------------------------------------------------
       
  1518 
       
  1519     Class: CModuleListView
       
  1520 
       
  1521     Method: SelectL
       
  1522 
       
  1523     Description: Process keypresses in menu. Handle right arrow and enter
       
  1524                  here, others in parent menu.
       
  1525 
       
  1526     Parameters: TKeyCode aSelection       :in:      Key
       
  1527                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  1528 
       
  1529     Return Values: CMenu*                           New menu
       
  1530 
       
  1531     Errors/Exceptions: None
       
  1532 
       
  1533     Status: Draft
       
  1534 
       
  1535 -------------------------------------------------------------------------------
       
  1536 */
       
  1537 CMenu* CModuleListView::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  1538     {
       
  1539     
       
  1540     MapKeyCode(aSelection);
       
  1541 
       
  1542     if( ( aSelection == EKeyRightArrow ||
       
  1543             aSelection == EKeyEnter ) )
       
  1544         {
       
  1545         if( iPosOnScreen == EAddMenuTxtItem )
       
  1546             {
       
  1547             return iModuleAdd;
       
  1548             }
       
  1549         else if( iPosOnScreen == ELoadMenuTxtItem )
       
  1550             {
       
  1551             iMain->UIStore().LoadAllModules();
       
  1552             return this;
       
  1553             }
       
  1554         else 
       
  1555             {
       
  1556             return this;
       
  1557             }
       
  1558         }
       
  1559 
       
  1560     return CMenu::SelectL( aSelection, aContinue );
       
  1561 
       
  1562     }
       
  1563 
       
  1564 /*
       
  1565 -------------------------------------------------------------------------------
       
  1566 
       
  1567     Class: CCaseStartMenu
       
  1568 
       
  1569     Method: NewL
       
  1570 
       
  1571     Description: Constructs new menu.
       
  1572 
       
  1573     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  1574                 CMenu* aParent            :in:      Parent menu
       
  1575                 const TDesC& aName        :in:      Menu name
       
  1576                 TBool aShowOutput         :in:      Show output after test case is run
       
  1577 
       
  1578     Return Values: CMenu*                           New menu
       
  1579 
       
  1580     Errors/Exceptions: Leaves if memory allocation fails
       
  1581                        Leaves if ConstructL leaves.
       
  1582 
       
  1583     Status: Draft
       
  1584 
       
  1585 -------------------------------------------------------------------------------
       
  1586 */
       
  1587 CCaseStartMenu* CCaseStartMenu::NewL( CConsoleMain* aConsole,
       
  1588                                       CMenu* aParent,
       
  1589                                       const TDesC& aName,
       
  1590                                       TBool aShowOutput)
       
  1591     {
       
  1592 
       
  1593     CCaseStartMenu* self = new ( ELeave ) CCaseStartMenu();
       
  1594     CleanupStack::PushL( self );
       
  1595     self->ConstructL( aConsole, aParent, aName, aShowOutput );
       
  1596     CleanupStack::Pop( self );
       
  1597     return self;
       
  1598     
       
  1599     }
       
  1600 
       
  1601 /*
       
  1602 -------------------------------------------------------------------------------
       
  1603 
       
  1604     Class: CCaseStartMenu
       
  1605 
       
  1606     Method: ConstructL
       
  1607 
       
  1608     Description: Second level constructor.
       
  1609 
       
  1610     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  1611                 CMenu* aParent            :in:      Parent menu
       
  1612                 const TDesC& aName        :in:      Menu name
       
  1613 
       
  1614     Return Values: None
       
  1615 
       
  1616     Errors/Exceptions: None
       
  1617 
       
  1618     Status: Draft
       
  1619 
       
  1620 -------------------------------------------------------------------------------
       
  1621 */
       
  1622 void CCaseStartMenu::ConstructL( CConsoleMain* aConsole,
       
  1623                                  CMenu* aParent,
       
  1624                                  const TDesC& aName,
       
  1625                                  TBool aShowOutput
       
  1626                                )
       
  1627     {
       
  1628 
       
  1629     iShowOutput = aShowOutput;
       
  1630     CMenu::ConstructL( aConsole, aParent, aName);
       
  1631 
       
  1632     }
       
  1633 
       
  1634 /*
       
  1635 -------------------------------------------------------------------------------
       
  1636 
       
  1637     CCaseStartMenu
       
  1638 
       
  1639     Method: ~CCaseStartMenu
       
  1640 
       
  1641     Description: Destructor
       
  1642 
       
  1643     Parameters: None
       
  1644 
       
  1645     Return Values: None
       
  1646 
       
  1647     Errors/Exceptions: None
       
  1648 
       
  1649     Status: Draft
       
  1650 
       
  1651 -------------------------------------------------------------------------------
       
  1652 */
       
  1653 CCaseStartMenu::~CCaseStartMenu()
       
  1654     {
       
  1655     iTestCases.Close();
       
  1656 
       
  1657     iMapFilteredToAll.Reset();
       
  1658     iMapFilteredToAll.Close();
       
  1659     }
       
  1660     
       
  1661 /*
       
  1662 -------------------------------------------------------------------------------
       
  1663 
       
  1664     Class: CCaseStartMenu
       
  1665 
       
  1666     Method: ItemText
       
  1667 
       
  1668     Description: Returns menu item text
       
  1669 
       
  1670     Parameters: const TInt                :in:      Menu index
       
  1671 
       
  1672     Return Values: const TDesC&                     Menu line text
       
  1673 
       
  1674     Errors/Exceptions: None
       
  1675 
       
  1676     Status: Draft
       
  1677 
       
  1678 -------------------------------------------------------------------------------
       
  1679 */
       
  1680 TInt CCaseStartMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  1681     {
       
  1682 
       
  1683     iTestCases.Reset();
       
  1684     TInt ret = iMain->UIStore().TestCases( iTestCases );
       
  1685     if( ret != KErrNone )
       
  1686         {
       
  1687         return ret;
       
  1688         }
       
  1689     
       
  1690     const RPointerArray<TDesC> &filters = iMain->GetFilterArray();
       
  1691     const TInt filterindex = iMain->GetFilterIndex(); 
       
  1692     iMapFilteredToAll.Reset();
       
  1693     
       
  1694     TInt count = iTestCases.Count();
       
  1695     for( TInt i = 0; i < count; i++ )
       
  1696         {
       
  1697         //If user has chosen filter, let's apply it
       
  1698         if(filterindex > 0) //skip the first filter which always is "No filter"
       
  1699             {
       
  1700             //Check whether test title is matching the applied filter
       
  1701             iTitleLowerCase.Copy(iTestCases[i].TestCaseTitle());
       
  1702             iTitleLowerCase.LowerCase();
       
  1703             iFilterLowerCase.Copy(*filters[filterindex]);
       
  1704             iFilterLowerCase.LowerCase();
       
  1705 
       
  1706             if(iTitleLowerCase.Match(iFilterLowerCase) != KErrNotFound)
       
  1707                 {
       
  1708                 ret = aArray.Append(iTestCases[i].TestCaseTitle());
       
  1709                 if(ret != KErrNone)
       
  1710                     {
       
  1711                     return ret;
       
  1712                     }
       
  1713                 ret = iMapFilteredToAll.Append(i);
       
  1714                 if(ret != KErrNone)
       
  1715                     {
       
  1716                     return ret;
       
  1717                     }                
       
  1718                 }
       
  1719             }
       
  1720         else
       
  1721             {
       
  1722             ret = aArray.Append( iTestCases[i].TestCaseTitle() );
       
  1723             if(ret != KErrNone)
       
  1724                 {
       
  1725                 return ret;
       
  1726                 }
       
  1727             ret = iMapFilteredToAll.Append(i);
       
  1728             if(ret != KErrNone)
       
  1729                 {
       
  1730                 return ret;
       
  1731                 }                
       
  1732             }
       
  1733         }
       
  1734         
       
  1735     return KErrNone;
       
  1736     }
       
  1737 
       
  1738 /*
       
  1739 -------------------------------------------------------------------------------
       
  1740 
       
  1741     Class: CCaseStartMenu
       
  1742 
       
  1743     Method: SelectL
       
  1744 
       
  1745     Description: Process keypresses in menu. Handle enter and right arrow here,
       
  1746     others in CMenu::SelectL.
       
  1747 
       
  1748     Parameters: TKeyCode aSelection       :in:      Key
       
  1749                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  1750 
       
  1751     Return Values: CMenu*                           New menu
       
  1752 
       
  1753     Errors/Exceptions: None
       
  1754 
       
  1755     Status: Draft
       
  1756 
       
  1757 -------------------------------------------------------------------------------
       
  1758 */
       
  1759 CMenu* CCaseStartMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  1760     {
       
  1761 
       
  1762     MapKeyCode(aSelection);
       
  1763     
       
  1764     switch ( aSelection )
       
  1765         {
       
  1766         case EKeyEnter:
       
  1767         case EKeyRightArrow:
       
  1768             {
       
  1769             // Start the case
       
  1770             if ( (iFirst + iPosOnScreen) < iMapFilteredToAll.Count() ) //changed from iTestCases to iMapFilteredToAll, because first table keeps info about all test cases, and second one about filtered cases
       
  1771                 {
       
  1772                 TInt index;
       
  1773                 User::LeaveIfError( 
       
  1774                     iMain->UIStore().StartTestCase( 
       
  1775                         iTestCases[iMapFilteredToAll[iFirst + iPosOnScreen]], index ) );
       
  1776                 // Create output screen (menu) if needed
       
  1777                 if(iShowOutput)
       
  1778                     {
       
  1779                     CMenu* m = iMain->GetMainMenu()->CreateOutputViewL(iParent);
       
  1780                     if(m)
       
  1781                         return m;
       
  1782                     }
       
  1783                 return iParent;
       
  1784                 }
       
  1785             else
       
  1786                 {
       
  1787                 return this;
       
  1788                 }
       
  1789             }
       
  1790 
       
  1791         default:
       
  1792             return CMenu::SelectL( aSelection, aContinue);
       
  1793         }
       
  1794 
       
  1795     }
       
  1796 
       
  1797 /*
       
  1798 -------------------------------------------------------------------------------
       
  1799 
       
  1800     CMultipleBaseMenu
       
  1801 
       
  1802     Method: NewL
       
  1803 
       
  1804     Description: Constructs new menu.
       
  1805 
       
  1806     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  1807                 CMenu* aParent            :in:      Parent menu
       
  1808                 const TDesC& aName        :in:      Menu name
       
  1809 
       
  1810     Return Values: CMenu*                           New menu
       
  1811 
       
  1812     Errors/Exceptions: Leaves if memory allocation fails
       
  1813                        Leaves if ConstructL leaves.
       
  1814 
       
  1815     Status: Draft
       
  1816 
       
  1817 -------------------------------------------------------------------------------
       
  1818 */
       
  1819 CMultipleBaseMenu* CMultipleBaseMenu::NewL( CConsoleMain* aConsole,
       
  1820                                             CMenu* aParent,
       
  1821                                             const TDesC& aName )
       
  1822     {
       
  1823 
       
  1824     CMultipleBaseMenu* self = new ( ELeave ) CMultipleBaseMenu();
       
  1825     CleanupStack::PushL( self );
       
  1826     self->ConstructL( aConsole, aParent, aName );
       
  1827     CleanupStack::Pop( self );
       
  1828     return self;
       
  1829     
       
  1830     }
       
  1831 
       
  1832 /*
       
  1833 -------------------------------------------------------------------------------
       
  1834 
       
  1835     CMultipleBaseMenu
       
  1836 
       
  1837     Method: CMultipleBaseMenu
       
  1838 
       
  1839     Description: Constructor
       
  1840 
       
  1841     Parameters: None
       
  1842 
       
  1843     Return Values: None
       
  1844 
       
  1845     Errors/Exceptions: None
       
  1846 
       
  1847     Status: Draft
       
  1848 
       
  1849 -------------------------------------------------------------------------------
       
  1850 */
       
  1851 CMultipleBaseMenu::CMultipleBaseMenu(): 
       
  1852     iSetFinished( ETrue ),
       
  1853     iRunType( ERunSequential ),
       
  1854     iMenuTotCount( 0 ),
       
  1855     iMenuCount( 0 )
       
  1856     {
       
  1857     
       
  1858     iMenuCount = EChangeAll + 1;
       
  1859     iMenuTotCount = iMenuCount;
       
  1860     
       
  1861     }   
       
  1862     
       
  1863 /*
       
  1864 -------------------------------------------------------------------------------
       
  1865 
       
  1866     CMultipleBaseMenu
       
  1867 
       
  1868     Method: ~CMultipleBaseMenu
       
  1869 
       
  1870     Description: Destructor
       
  1871 
       
  1872     Parameters: None
       
  1873 
       
  1874     Return Values: None
       
  1875 
       
  1876     Errors/Exceptions: None
       
  1877 
       
  1878     Status: Draft
       
  1879 
       
  1880 -------------------------------------------------------------------------------
       
  1881 */
       
  1882 CMultipleBaseMenu::~CMultipleBaseMenu()
       
  1883     {
       
  1884     
       
  1885     iSetState.Close();
       
  1886     
       
  1887     }   
       
  1888 
       
  1889 /*
       
  1890 -------------------------------------------------------------------------------
       
  1891 
       
  1892     Class: CMultipleBaseMenu
       
  1893 
       
  1894     Method: ConstructL
       
  1895 
       
  1896     Description: Second level constructor.
       
  1897 
       
  1898     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  1899                 CMenu* aParent            :in:      Parent menu
       
  1900                 const TDesC& aName        :in:      Menu name
       
  1901 
       
  1902     Return Values: None
       
  1903 
       
  1904     Errors/Exceptions: None
       
  1905 
       
  1906     Status: Draft
       
  1907 
       
  1908 -------------------------------------------------------------------------------
       
  1909 */
       
  1910 void CMultipleBaseMenu::ConstructL( CConsoleMain* aConsole,
       
  1911                                CMenu* aParent,
       
  1912                                const TDesC& aName 
       
  1913                              )
       
  1914     {
       
  1915 
       
  1916     CCaseStartMenu::ConstructL( aConsole, aParent, aName );
       
  1917 
       
  1918     }
       
  1919 
       
  1920 
       
  1921 /*
       
  1922 -------------------------------------------------------------------------------
       
  1923 
       
  1924     Class: CMultipleBaseMenu
       
  1925 
       
  1926     Method: ItemText
       
  1927 
       
  1928     Description: Returns menu item text
       
  1929 
       
  1930     Parameters: const TInt                :in:      Menu index
       
  1931 
       
  1932     Return Values: const TDesC&                     Menu line text
       
  1933 
       
  1934     Errors/Exceptions: None
       
  1935 
       
  1936     Status: Draft
       
  1937 
       
  1938 -------------------------------------------------------------------------------
       
  1939 */
       
  1940 TInt CMultipleBaseMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  1941     {
       
  1942 
       
  1943     if ( iSetFinished )
       
  1944         {
       
  1945         if( aArray.Append( KChangeAll ) != KErrNone )
       
  1946             {
       
  1947             return KErrNoMemory;
       
  1948             }
       
  1949         
       
  1950         if( iUpdateType ==  EMenuPrint )
       
  1951             {   
       
  1952             TInt ret = UpdateTestCases();
       
  1953             if( ret != KErrNone )
       
  1954                 {                 
       
  1955                 return ret;
       
  1956                 }
       
  1957             }
       
  1958         TInt count = iTestCases.Count();
       
  1959         for( TInt j=0; j<count; j++ )
       
  1960             {
       
  1961             if( aArray.Append( iTestCases[j].TestCaseTitle() ) 
       
  1962                 != KErrNone )
       
  1963                 {
       
  1964                 return KErrNoMemory;
       
  1965                 }
       
  1966             if( aArray.Count() > iSetState.Count())
       
  1967                 {
       
  1968                 // Appends iSetState only if aArray's size is bigger @js
       
  1969                 if( iSetState.Append(EFalse) != KErrNone )
       
  1970                     {
       
  1971                     return KErrNoMemory;
       
  1972                     }
       
  1973                 }
       
  1974             }
       
  1975         }
       
  1976     else
       
  1977         {
       
  1978         if( aArray.Append( KCancelSet ) != KErrNone )
       
  1979             {
       
  1980             return KErrNoMemory;
       
  1981             }
       
  1982         }
       
  1983     
       
  1984     return KErrNone;
       
  1985     
       
  1986     }
       
  1987 
       
  1988 /*
       
  1989 -------------------------------------------------------------------------------
       
  1990     Class: CMultipleBaseMenu
       
  1991 
       
  1992     Method: AppendBefore
       
  1993 
       
  1994     Description: Append text before line.
       
  1995 
       
  1996     Parameters: TInt aLine: in: line number 
       
  1997                 TDes& aLine: in: line text
       
  1998 
       
  1999     Return Values: None
       
  2000 
       
  2001     Errors/Exceptions: None
       
  2002 
       
  2003     Status: Draft
       
  2004     
       
  2005 -------------------------------------------------------------------------------
       
  2006 */
       
  2007 void CMultipleBaseMenu::AppendBefore( TInt aLineNum, TDes& aLine )
       
  2008     {
       
  2009     
       
  2010     CMenu::AppendBefore( aLineNum, aLine );
       
  2011     if( ( aLine.MaxLength() - aLine.Length() ) < 2 )
       
  2012         {
       
  2013         return;
       
  2014         }        
       
  2015     
       
  2016     if( aLineNum >= iMenuTotCount )
       
  2017         {
       
  2018         if ( iSetState[ aLineNum - iMenuTotCount ] )
       
  2019             {
       
  2020             aLine.Append(_L("S "));
       
  2021             }
       
  2022         else
       
  2023             {
       
  2024             aLine.Append(_L("  "));
       
  2025             }
       
  2026         }
       
  2027    
       
  2028     }
       
  2029 
       
  2030 /*
       
  2031 -------------------------------------------------------------------------------
       
  2032 
       
  2033     Class: CMultipleBaseMenu
       
  2034 
       
  2035     Method: SelectL
       
  2036 
       
  2037     Description: Process keypresses in menu. Handle enter and right arrow here,
       
  2038     others in CMenu::SelectL.
       
  2039 
       
  2040     Parameters: TKeyCode aSelection       :in:      Key
       
  2041                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  2042 
       
  2043     Return Values: CMenu*                           New menu
       
  2044 
       
  2045     Errors/Exceptions: None
       
  2046 
       
  2047     Status: Draft
       
  2048 
       
  2049 -------------------------------------------------------------------------------
       
  2050 */
       
  2051 CMenu* CMultipleBaseMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  2052     {
       
  2053 
       
  2054     MapKeyCode(aSelection);
       
  2055     
       
  2056     if ( iSetFinished )
       
  2057         {
       
  2058 
       
  2059         if ( ( aSelection == EKeyEnter  ) || ( aSelection == EKeyRightArrow ) )
       
  2060             {
       
  2061             // CMultipleBaseMenu relative position 
       
  2062             TInt pos = iFirst + iPosOnScreen - iMenuTotCount + iMenuCount;
       
  2063             if( pos  == EChangeAll )
       
  2064                 {
       
  2065                 TInt count = iTestCases.Count();    
       
  2066 
       
  2067                 // Change all                                       
       
  2068                 for (TInt i = 0; i < count; i++)
       
  2069                     {
       
  2070                     iSetState[i] = !iSetState[i];
       
  2071                     }
       
  2072 
       
  2073                 return this;
       
  2074                 }
       
  2075             else
       
  2076                 {
       
  2077                 // Normal item, change state...
       
  2078                 iSetState[ iFirst + iPosOnScreen - iMenuTotCount ] = 
       
  2079                     !iSetState[ iFirst + iPosOnScreen - iMenuTotCount ];
       
  2080                 return this;
       
  2081                 }            
       
  2082             
       
  2083             }
       
  2084 
       
  2085 		return CMenu::SelectL( aSelection, aContinue );
       
  2086         }
       
  2087     else
       
  2088         {
       
  2089 
       
  2090         switch ( aSelection )
       
  2091             {
       
  2092             case EKeyEnter:
       
  2093             case EKeyRightArrow:
       
  2094                 {
       
  2095                 if ( iOngoingCaseContainer != NULL )
       
  2096                     {
       
  2097                     iOngoingCaseContainer->UIEngineContainer().CancelTest();
       
  2098                     }
       
  2099                 iSetFinished = ETrue;
       
  2100                 iFirst = 0;
       
  2101                 iLast = 0;
       
  2102                 return this;
       
  2103                 }
       
  2104             default:
       
  2105                 return CMenu::SelectL( aSelection, aContinue );
       
  2106             }
       
  2107 
       
  2108 
       
  2109 
       
  2110         }
       
  2111 
       
  2112     }
       
  2113 
       
  2114 /*
       
  2115 -------------------------------------------------------------------------------
       
  2116 
       
  2117     Class: CMultipleBaseMenu
       
  2118 
       
  2119     Method: CheckIfAnyCaseIsSelected
       
  2120 
       
  2121     Description: Checks if any of testcases was selected in multiple selection menu
       
  2122 
       
  2123     Parameters: TInt aCount number of testcases in multiple selection menu
       
  2124 
       
  2125     Return Values: ETrue if any testcase was selected, EFalse if none of testcases was selected
       
  2126 
       
  2127     Errors/Exceptions: None
       
  2128 
       
  2129     Status: Proposal
       
  2130 
       
  2131 -------------------------------------------------------------------------------
       
  2132 */
       
  2133 TBool CMultipleBaseMenu::CheckIfAnyCaseIsSelected(TInt aCount)
       
  2134 {
       
  2135 	TInt currentPos = 0;
       
  2136 	for(; currentPos<aCount; currentPos++)	
       
  2137 	{
       
  2138 		//if any of testcases was selected then return true
       
  2139 		if (iSetState[currentPos])
       
  2140 			return ETrue;
       
  2141 	}
       
  2142 	//if none of testcases was selected then return false
       
  2143 	return EFalse;
       
  2144 }
       
  2145 
       
  2146 /*
       
  2147 -------------------------------------------------------------------------------
       
  2148 
       
  2149     Class: CMultipleBaseMenu
       
  2150 
       
  2151     Method: SignalL
       
  2152 
       
  2153     Description: Handle test case starts
       
  2154 
       
  2155     Parameters: CStartedTestCase* aContainer: in: CStartedTestCase container
       
  2156 
       
  2157     Return Values: None
       
  2158 
       
  2159     Errors/Exceptions: None
       
  2160 
       
  2161     Status: Approved
       
  2162 
       
  2163 -------------------------------------------------------------------------------
       
  2164 */
       
  2165 void CMultipleBaseMenu::SignalL( CStartedTestCase* /*aContainer*/ )
       
  2166     {
       
  2167 
       
  2168     TInt count = iTestCases.Count();
       
  2169     
       
  2170     TBool started = EFalse;
       
  2171     TInt index;
       
  2172     TInt err = KErrNone;
       
  2173 
       
  2174     // Counter to prevent infinite loop when cases can't be started at all
       
  2175     // when running cases in repeat mode.
       
  2176     TInt casesChecked = 0;
       
  2177 
       
  2178     // If cases are not aborted or not in last case and at least one test
       
  2179     // case was selected, start a new one
       
  2180     if ( !iSetFinished && iCurrentRunPos != count && CheckIfAnyCaseIsSelected(count) )
       
  2181         {
       
  2182         // Search next case from set and execute it.
       
  2183         while( iCurrentRunPos < count )
       
  2184             {
       
  2185             if ( iSetState[iCurrentRunPos] )
       
  2186                 {       
       
  2187                 err = iMain->UIStore().StartTestCase( 
       
  2188                     iTestCases[ iCurrentRunPos ], 
       
  2189                     index );
       
  2190 
       
  2191                 iCurrentRunPos++;
       
  2192                 casesChecked++;
       
  2193 
       
  2194                 // Go to start of list, if running cases in repeat mode. 
       
  2195                 // In other modes, just get out from the main loop
       
  2196                 if( ( iRunType == ERunRepeatSequential ) &&
       
  2197                     ( iCurrentRunPos >= count ) )
       
  2198                     {
       
  2199                     // Restart from first one on next time.
       
  2200                     iCurrentRunPos = 0;
       
  2201                     }
       
  2202 
       
  2203                 // Handle out of memory error separately, because there is
       
  2204                 // always new test case result display constructed when
       
  2205                 // starting case => Starting more new cases uses more memory
       
  2206                 // and it will not work, so stop starting new cases.
       
  2207                 if( err == KErrNoMemory )
       
  2208                     {
       
  2209                     iSetFinished = ETrue;
       
  2210                     break;
       
  2211                     }
       
  2212 
       
  2213                 // Get pointer to ongoing case in case that user wants to
       
  2214                 // cancel it.
       
  2215                 iOngoingCaseContainer = 
       
  2216                     &iMain->UIStore().StartedTestCaseL( index );
       
  2217 
       
  2218                 // Store pointer to this object to allow 
       
  2219                 // SignalL call when test case is completed
       
  2220                 iOngoingCaseContainer->iBackPtr = (TAny*)this;
       
  2221 
       
  2222                 if( err != KErrNone )
       
  2223                     {
       
  2224                     TFullTestResult result;  
       
  2225                     result.iTestResult.iResult = err;
       
  2226                     result.iTestResult.iResultDes.Copy( 
       
  2227                                             _L("Failed to start testcase") );
       
  2228                     // Prevent infinite loop in case, where
       
  2229                     // ERunRepeatSequential and ALL cases fail to start.
       
  2230                     if ( iRunType == ERunRepeatSequential && 
       
  2231                                             casesChecked == count )
       
  2232                         {
       
  2233                         // In this state, started = EFalse so final check
       
  2234                         // stops running
       
  2235                         break;
       
  2236                         }
       
  2237                     }
       
  2238                 else if( ( iRunType == ERunSequential ) ||
       
  2239                          ( iRunType == ERunRepeatSequential ) )
       
  2240                     {
       
  2241                     started = ETrue;
       
  2242                     break;
       
  2243                     }
       
  2244                 }
       
  2245             else 
       
  2246                 {
       
  2247                 iCurrentRunPos++;
       
  2248                 casesChecked++;
       
  2249 
       
  2250                 // Go to start of list, if running cases in repeat mode. 
       
  2251                 // In other modes, just get out from the main loop
       
  2252                 if( ( iRunType == ERunRepeatSequential ) &&
       
  2253                     ( iCurrentRunPos >= count ) )
       
  2254                     {
       
  2255                     // Restart from first one
       
  2256                     iCurrentRunPos = 0;
       
  2257                     }
       
  2258                 }
       
  2259             }
       
  2260         }
       
  2261 
       
  2262     if ( err == KErrNoMemory )
       
  2263     	{
       
  2264     	iMain->ExitWithNoMemoryErrorMessage();
       
  2265     	}
       
  2266     
       
  2267     // If nothing was selected, then mark set as finished. 
       
  2268     // Or running cases at same time, so all have been started.
       
  2269     if ( started == EFalse )
       
  2270         {
       
  2271         iFirst = 0;
       
  2272         iLast = 0;
       
  2273         iSetFinished = ETrue;
       
  2274         iCurrentRunPos = 0;
       
  2275         }
       
  2276 
       
  2277     }
       
  2278 
       
  2279 /*
       
  2280 -------------------------------------------------------------------------------
       
  2281 
       
  2282     Class: CMultipleBaseMenu
       
  2283 
       
  2284     Method: UpdateTestCases
       
  2285 
       
  2286     Description: 
       
  2287 
       
  2288     Parameters: 
       
  2289 
       
  2290     Return Values: 
       
  2291 
       
  2292     Errors/Exceptions: None
       
  2293 
       
  2294     Status: Draft
       
  2295 
       
  2296 -------------------------------------------------------------------------------
       
  2297 */
       
  2298 TInt CMultipleBaseMenu::UpdateTestCases()
       
  2299     {
       
  2300 
       
  2301     // Update test cases
       
  2302     iTestCases.Reset();
       
  2303     iSetState.Reset();
       
  2304     return iMain->UIStore().TestCases( iTestCases );
       
  2305             
       
  2306     }
       
  2307 
       
  2308 /*
       
  2309 -------------------------------------------------------------------------------
       
  2310 
       
  2311     CMultipleCaseMenu
       
  2312 
       
  2313     Method: NewL
       
  2314 
       
  2315     Description: Constructs new menu.
       
  2316 
       
  2317     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  2318                 CMenu* aParent            :in:      Parent menu
       
  2319                 const TDesC& aName        :in:      Menu name
       
  2320 
       
  2321     Return Values: CMenu*                           New menu
       
  2322 
       
  2323     Errors/Exceptions: Leaves if memory allocation fails
       
  2324                        Leaves if ConstructL leaves.
       
  2325 
       
  2326     Status: Draft
       
  2327 
       
  2328 -------------------------------------------------------------------------------
       
  2329 */
       
  2330 CMultipleCaseMenu* CMultipleCaseMenu::NewL( CConsoleMain* aConsole,
       
  2331                                             CMenu* aParent,
       
  2332                                             const TDesC& aName )
       
  2333     {
       
  2334 
       
  2335     CMultipleCaseMenu* self = new ( ELeave ) CMultipleCaseMenu();
       
  2336     CleanupStack::PushL( self );
       
  2337     self->ConstructL( aConsole, aParent, aName );
       
  2338     CleanupStack::Pop( self );
       
  2339     return self;
       
  2340     
       
  2341     }
       
  2342 
       
  2343 /*
       
  2344 -------------------------------------------------------------------------------
       
  2345 
       
  2346     CMultipleCaseMenu
       
  2347 
       
  2348     Method: CMultipleCaseMenu
       
  2349 
       
  2350     Description: Constructor
       
  2351 
       
  2352     Parameters: None
       
  2353 
       
  2354     Return Values: None
       
  2355 
       
  2356     Errors/Exceptions: None
       
  2357 
       
  2358     Status: Draft
       
  2359 
       
  2360 -------------------------------------------------------------------------------
       
  2361 */
       
  2362 CMultipleCaseMenu::CMultipleCaseMenu()    
       
  2363     {
       
  2364     
       
  2365     iMenuItemsCount = ERepeatRunSelection + 1;
       
  2366     iMenuItemsCount++; //Select all between already selected
       
  2367     iMenuTotCount += iMenuItemsCount;
       
  2368     
       
  2369     }   
       
  2370 
       
  2371 /*
       
  2372 -------------------------------------------------------------------------------
       
  2373 
       
  2374     CMultipleCaseMenu
       
  2375 
       
  2376     Method: ~CMultipleCaseMenu
       
  2377 
       
  2378     Description: Destructor
       
  2379 
       
  2380     Parameters: None
       
  2381 
       
  2382     Return Values: None
       
  2383 
       
  2384     Errors/Exceptions: None
       
  2385 
       
  2386     Status: Draft
       
  2387 
       
  2388 -------------------------------------------------------------------------------
       
  2389 */
       
  2390 CMultipleCaseMenu::~CMultipleCaseMenu()
       
  2391     {
       
  2392     }   
       
  2393 
       
  2394 /*
       
  2395 -------------------------------------------------------------------------------
       
  2396 
       
  2397     Class: CMultipleCaseMenu
       
  2398 
       
  2399     Method: ConstructL
       
  2400 
       
  2401     Description: Second level constructor.
       
  2402 
       
  2403     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  2404                 CMenu* aParent            :in:      Parent menu
       
  2405                 const TDesC& aName        :in:      Menu name
       
  2406 
       
  2407     Return Values: None
       
  2408 
       
  2409     Errors/Exceptions: None
       
  2410 
       
  2411     Status: Draft
       
  2412 
       
  2413 -------------------------------------------------------------------------------
       
  2414 */
       
  2415 void CMultipleCaseMenu::ConstructL( CConsoleMain* aConsole,
       
  2416                                CMenu* aParent,
       
  2417                                const TDesC& aName 
       
  2418                              )
       
  2419     {
       
  2420 
       
  2421     CCaseStartMenu::ConstructL( aConsole, aParent, aName );
       
  2422 
       
  2423     }
       
  2424 
       
  2425 /*
       
  2426 -------------------------------------------------------------------------------
       
  2427 
       
  2428     Class: CMultipleCaseMenu
       
  2429 
       
  2430     Method: StartRunningL
       
  2431 
       
  2432     Description: Start running multiple cases.
       
  2433 
       
  2434     Parameters: TRunType aRunType: in: Running type
       
  2435                 const TDesC& aModule: in: module name 
       
  2436                 const TDesC& aTestCaseFile: in: test case file name 
       
  2437 
       
  2438     Return Values: None
       
  2439 
       
  2440     Errors/Exceptions: Leaves on error
       
  2441 
       
  2442     Status: Draft
       
  2443 
       
  2444 -------------------------------------------------------------------------------
       
  2445 */
       
  2446 void CMultipleCaseMenu::StartRunningL( TRunType aRunType, 
       
  2447                                        const TDesC& aModule, 
       
  2448                                        const TDesC& aTestCaseFile )
       
  2449     {
       
  2450     
       
  2451     // Update test cases
       
  2452     iTestCases.Reset();
       
  2453     iSetState.Reset();
       
  2454     User::LeaveIfError( 
       
  2455         iMain->UIStore().TestCases( iTestCases, aModule, aTestCaseFile ) );
       
  2456     
       
  2457     // Select all for running
       
  2458     TInt count = iTestCases.Count();
       
  2459     for( TInt j=0; j<count; j++ )
       
  2460         {
       
  2461         User::LeaveIfError( iSetState.Append(ETrue) );
       
  2462         }
       
  2463         
       
  2464     // Start running
       
  2465     iCurrentRunPos = 0;
       
  2466     iSetFinished = EFalse;
       
  2467     iRunType = aRunType;
       
  2468     SignalL ( NULL );
       
  2469 
       
  2470     }
       
  2471 
       
  2472 /*
       
  2473 -------------------------------------------------------------------------------
       
  2474 
       
  2475     Class: CMultipleCaseMenu
       
  2476 
       
  2477     Method: ItemText
       
  2478 
       
  2479     Description: Returns menu item text
       
  2480 
       
  2481     Parameters: const TInt                :in:      Menu index
       
  2482 
       
  2483     Return Values: const TDesC&                     Menu line text
       
  2484 
       
  2485     Errors/Exceptions: None
       
  2486 
       
  2487     Status: Draft
       
  2488 
       
  2489 -------------------------------------------------------------------------------
       
  2490 */
       
  2491 TInt CMultipleCaseMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  2492     {
       
  2493 
       
  2494     if ( iSetFinished )
       
  2495         {
       
  2496         if( aArray.Append( KRunSequentially ) != KErrNone )
       
  2497             {
       
  2498             return KErrNoMemory;
       
  2499             }
       
  2500         if( aArray.Append( KRunParallel ) != KErrNone )
       
  2501             {
       
  2502             return KErrNoMemory;
       
  2503             }
       
  2504         if( aArray.Append( KRepeatRunSequentially ) != KErrNone )
       
  2505             {
       
  2506             return KErrNoMemory;
       
  2507             }
       
  2508         if(aArray.Append(KSelectFromTo) != KErrNone)
       
  2509             {
       
  2510             return KErrNoMemory;
       
  2511             }
       
  2512         }
       
  2513 
       
  2514     TInt ret = CMultipleBaseMenu::ItemTexts(aArray);
       
  2515     if(ret != KErrNone)
       
  2516         {
       
  2517         return ret;
       
  2518         }
       
  2519     
       
  2520     return KErrNone;    
       
  2521     }
       
  2522 
       
  2523 /*
       
  2524 -------------------------------------------------------------------------------
       
  2525 
       
  2526     Class: CMultipleCaseMenu
       
  2527 
       
  2528     Method: SelectL
       
  2529 
       
  2530     Description: Process keypresses in menu. Handle enter and right arrow here,
       
  2531     others in CMenu::SelectL.
       
  2532 
       
  2533     Parameters: TKeyCode aSelection       :in:      Key
       
  2534                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  2535 
       
  2536     Return Values: CMenu*                           New menu
       
  2537 
       
  2538     Errors/Exceptions: None
       
  2539 
       
  2540     Status: Draft
       
  2541 
       
  2542 -------------------------------------------------------------------------------
       
  2543 */
       
  2544 CMenu* CMultipleCaseMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  2545     {
       
  2546 
       
  2547     MapKeyCode(aSelection);
       
  2548     
       
  2549     if ( iSetFinished )
       
  2550         {
       
  2551         switch ( aSelection )
       
  2552             {
       
  2553             case EKeyEnter:
       
  2554             case EKeyRightArrow:
       
  2555                 {
       
  2556 
       
  2557                 if ( iFirst + iPosOnScreen == ERunSelection )
       
  2558                     {
       
  2559                     // Start the first one
       
  2560                     iCurrentRunPos = 0;
       
  2561                     iSetFinished = EFalse;
       
  2562                     iRunType = ERunSequential;
       
  2563                     SignalL ( NULL );
       
  2564 
       
  2565                     return iParent;
       
  2566                     }
       
  2567                 else if ( iFirst + iPosOnScreen == ERunSelectionParaller )
       
  2568                     {
       
  2569                     // Start the first one
       
  2570                     iCurrentRunPos = 0;
       
  2571                     iSetFinished = EFalse;
       
  2572                     iRunType = ERunParallel;
       
  2573                     SignalL ( NULL );
       
  2574 
       
  2575                     return iParent;
       
  2576                     }
       
  2577                 else if ( iFirst + iPosOnScreen == ERepeatRunSelection )
       
  2578                     {
       
  2579                     // Start the first one
       
  2580                     iCurrentRunPos = 0;
       
  2581                     iSetFinished = EFalse;
       
  2582                     iRunType = ERunRepeatSequential;
       
  2583                     SignalL ( NULL );
       
  2584 
       
  2585                     return iParent;
       
  2586                     }
       
  2587                 else if(iFirst + iPosOnScreen == ESelectFromTo)
       
  2588                     {
       
  2589                     TInt count = iTestCases.Count();
       
  2590                     TInt indexFirst = count;
       
  2591                     TInt indexLast = count - 1;
       
  2592                     TInt i;
       
  2593                     
       
  2594                     // Find first test case which is set
       
  2595                     for(i = 0; i < count; i++)
       
  2596                         {
       
  2597                         if(iSetState[i])
       
  2598                             {
       
  2599                             indexFirst = i;
       
  2600                             break;
       
  2601                             }
       
  2602                         }
       
  2603                     
       
  2604                     // Find last test case which is set
       
  2605                     if(indexFirst < count)
       
  2606                         {
       
  2607                         for(i = count - 1; i > indexFirst; i--)
       
  2608                             {
       
  2609                             if(iSetState[i])
       
  2610                                 {
       
  2611                                 indexLast = i;
       
  2612                                 break;
       
  2613                                 }
       
  2614                             }
       
  2615                         
       
  2616                         // Set test cases between first and last
       
  2617                         for(i = indexFirst; i <= indexLast; i++)
       
  2618                             {
       
  2619                             iSetState[i] = ETrue;
       
  2620                             }
       
  2621                         }
       
  2622 
       
  2623                     return this;
       
  2624                     }
       
  2625                 }
       
  2626                 break;
       
  2627             default:
       
  2628                 break;
       
  2629             }
       
  2630         }   
       
  2631         
       
  2632     return CMultipleBaseMenu::SelectL( aSelection, aContinue );
       
  2633         
       
  2634     }
       
  2635     
       
  2636 /*
       
  2637 -------------------------------------------------------------------------------
       
  2638 
       
  2639     Class: CCaseMenu
       
  2640 
       
  2641     Method: NewL
       
  2642 
       
  2643     Description: Constructs new menu.
       
  2644 
       
  2645     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  2646                 CMenu* aParent            :in:      Parent menu
       
  2647                 const TDesC& aName        :in:      Menu name
       
  2648                 TCaseState aType          :in:      Case state
       
  2649 
       
  2650     Return Values: CMenu*                           New menu
       
  2651 
       
  2652     Errors/Exceptions: Leaves if memory allocation fails
       
  2653                        Leaves if ConstructL leaves.
       
  2654 
       
  2655     Status: Draft
       
  2656 
       
  2657 -------------------------------------------------------------------------------
       
  2658 */
       
  2659 CCaseMenu* CCaseMenu::NewL( CConsoleMain* aConsole, 
       
  2660                             CMenu* aParent, 
       
  2661                             const TDesC& aName, 
       
  2662                             TInt aType )
       
  2663     {
       
  2664 
       
  2665     CCaseMenu* self = new ( ELeave ) CCaseMenu();
       
  2666     CleanupStack::PushL( self );
       
  2667     self->ConstructL( aConsole, aParent, aName, aType );
       
  2668     CleanupStack::Pop( self );
       
  2669     return self;
       
  2670 
       
  2671     }
       
  2672 
       
  2673 /*
       
  2674 -------------------------------------------------------------------------------
       
  2675 
       
  2676     Class: CCaseMenu
       
  2677 
       
  2678     Method: ConstructL
       
  2679 
       
  2680     Description: Second level constructor.
       
  2681 
       
  2682     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  2683                 CMenu* aParent            :in:      Parent menu
       
  2684                 const TDesC& aName        :in:      Menu name
       
  2685                 TCaseState aType          :in:      Case state
       
  2686 
       
  2687     Return Values: None
       
  2688 
       
  2689     Errors/Exceptions: Leaves if parent class ConstructL leaves
       
  2690                        Leaves if memory allocation fails
       
  2691                        Leaves if CCaseOperation menu NewL leaves
       
  2692                        Leaves if UpcateCaseListL leaves
       
  2693 
       
  2694     Status: Draft
       
  2695 
       
  2696 -------------------------------------------------------------------------------
       
  2697 */
       
  2698 void CCaseMenu::ConstructL( CConsoleMain* aConsole, 
       
  2699                             CMenu* aParent, 
       
  2700                             const TDesC& aName, 
       
  2701                             TInt aType
       
  2702                           )
       
  2703     {
       
  2704 
       
  2705     CMenu::ConstructL( aConsole, aParent, aName);
       
  2706     iType = aType;
       
  2707 
       
  2708     }
       
  2709 
       
  2710 
       
  2711 
       
  2712 /*
       
  2713 -------------------------------------------------------------------------------
       
  2714 
       
  2715     Class: CCaseMenu
       
  2716 
       
  2717     Method: ~CCaseMenu
       
  2718 
       
  2719     Description: Destructor
       
  2720 
       
  2721     Parameters: None
       
  2722 
       
  2723     Return Values: None
       
  2724 
       
  2725     Errors/Exceptions: None
       
  2726 
       
  2727     Status: Draft
       
  2728     
       
  2729 -------------------------------------------------------------------------------
       
  2730 */
       
  2731 CCaseMenu::~CCaseMenu()
       
  2732     {
       
  2733 
       
  2734     delete iCaseOperationMenu;
       
  2735     iCaseOperationMenu = 0;
       
  2736     
       
  2737     iTestCases.Close();
       
  2738 
       
  2739     }
       
  2740 
       
  2741 
       
  2742 /*
       
  2743 -------------------------------------------------------------------------------
       
  2744 
       
  2745     Class: CCaseMenu
       
  2746 
       
  2747     Method: ItemText
       
  2748 
       
  2749     Description: Returns menu item text
       
  2750 
       
  2751     Parameters: const TInt                :in:      Menu index
       
  2752 
       
  2753     Return Values: const TDesC&                     Menu line text
       
  2754 
       
  2755     Errors/Exceptions: None
       
  2756 
       
  2757     Status: Draft
       
  2758 
       
  2759 -------------------------------------------------------------------------------
       
  2760 */
       
  2761 TInt CCaseMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  2762     {
       
  2763     
       
  2764     iTestCases.Reset();
       
  2765     
       
  2766     TInt ret = iMain->UIStore().StartedTestCases( iTestCases, iType );
       
  2767     if ( ret != KErrNone )
       
  2768     	{
       
  2769     	return ret;
       
  2770     	}
       
  2771 
       
  2772     TInt count = iTestCases.Count();
       
  2773     for( TInt i=0; i<count; i++ )
       
  2774         {
       
  2775         if( aArray.Append( iTestCases[i].TestInfo().TestCaseTitle() ) != KErrNone )
       
  2776             {
       
  2777             return KErrNoMemory;
       
  2778             }
       
  2779         }
       
  2780 
       
  2781     return KErrNone;
       
  2782     }
       
  2783 
       
  2784 /*
       
  2785 -------------------------------------------------------------------------------
       
  2786     Class: CCaseMenu
       
  2787 
       
  2788     Method: AppendBefore
       
  2789 
       
  2790     Description: Append text before line.
       
  2791 
       
  2792     Parameters: TInt aLine: in: line number
       
  2793                 TDes& aLine: in: line text
       
  2794 
       
  2795     Return Values: None
       
  2796 
       
  2797     Errors/Exceptions: None
       
  2798 
       
  2799     Status: Draft
       
  2800 
       
  2801 -------------------------------------------------------------------------------
       
  2802 */
       
  2803 void CCaseMenu::AppendBefore(TInt aLineNum, TDes& aLine)
       
  2804     {
       
  2805     CMenu::AppendBefore(aLineNum, aLine);
       
  2806 
       
  2807     //START of --Add number to the test case title--
       
  2808     //First check how much space we need
       
  2809     TInt additionalSpace = 0;
       
  2810     TInt currentCount = aLineNum + 1;
       
  2811 
       
  2812     if(currentCount >= 10000) additionalSpace = 10; //f.e. "10157521. "
       
  2813     else if(currentCount >= 1000) additionalSpace = 6; //f.e. "1157. "
       
  2814     else if(currentCount >= 100) additionalSpace = 5; //f.e. "101. "
       
  2815     else if(currentCount >= 10) additionalSpace = 4; //f.e. "15. "
       
  2816     else additionalSpace = 3; //f.e. "1. "
       
  2817 
       
  2818  //Create descriptor, add content to it, and finally append to line
       
  2819     TBuf<20> num;
       
  2820 
       
  2821     if(iTestCases[aLineNum].Status() == CUIStoreIf::EStatusRunning )
       
  2822  	   {
       
  2823     if( iTestCases[aLineNum].UIEngineContainer().State() == CUIEngineContainer::EPaused)
       
  2824      	{
       
  2825      	  //If not enough space, return
       
  2826      	if((aLine.MaxLength() - aLine.Length()) < additionalSpace + 4)
       
  2827      	     {
       
  2828      	     return;
       
  2829      	     }
       
  2830      		num.Format(_L("%d.(P) "), currentCount);
       
  2831      	}
       
  2832      else
       
  2833      	{
       
  2834         //If not enough space, return
       
  2835      	if((aLine.MaxLength() - aLine.Length()) < additionalSpace)
       
  2836      		{
       
  2837      	  	return;
       
  2838      	     }     		  			
       
  2839      	num.Format(_L("%d."), currentCount);
       
  2840      	}
       
  2841  	   }
       
  2842     aLine.Append(num);
       
  2843     }
       
  2844     //END of --Add number to test case title--
       
  2845     
       
  2846 
       
  2847 /*
       
  2848 -------------------------------------------------------------------------------
       
  2849 
       
  2850     Class: CCaseMenu
       
  2851 
       
  2852     Method: SelectL
       
  2853 
       
  2854     Description: Process keypresses in menu. Handle Enter and Right Arrow
       
  2855     here, other will be handled in CMenu::SelectL
       
  2856 
       
  2857     Parameters: TKeyCode aSelection       :in:      Key
       
  2858                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  2859 
       
  2860     Return Values: CMenu*                           New menu
       
  2861 
       
  2862     Errors/Exceptions: None
       
  2863 
       
  2864     Status: Draft
       
  2865 
       
  2866 -------------------------------------------------------------------------------
       
  2867 */
       
  2868 CMenu* CCaseMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  2869     {
       
  2870 
       
  2871     MapKeyCode(aSelection);
       
  2872     
       
  2873     switch (aSelection)
       
  2874         {
       
  2875         case EKeyEnter:
       
  2876         case EKeyRightArrow:
       
  2877             {
       
  2878             if ( iFirst + iPosOnScreen < iTestCases.Count() )
       
  2879                 {
       
  2880                 delete iCaseOperationMenu;
       
  2881                 iCaseOperationMenu = 0;
       
  2882                 iCaseOperationMenu = CCaseOperationMenu::NewL( 
       
  2883                     iMain, 
       
  2884                     this, 
       
  2885                     iTestCases[iFirst + iPosOnScreen].TestInfo().TestCaseTitle(), 
       
  2886                     &iTestCases[iFirst + iPosOnScreen] );   
       
  2887 
       
  2888                 return iCaseOperationMenu;
       
  2889                 }
       
  2890             }
       
  2891             return this;
       
  2892         default:
       
  2893             // Let the parent class handle rest
       
  2894             return CMenu::SelectL(aSelection, aContinue);
       
  2895         }
       
  2896     
       
  2897     }
       
  2898 
       
  2899 
       
  2900 /*
       
  2901 -------------------------------------------------------------------------------
       
  2902 
       
  2903     Class: CCaseOperationMenu
       
  2904 
       
  2905     Method: NewL
       
  2906 
       
  2907     Description: Constructs new menu.
       
  2908 
       
  2909     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  2910                 CMenu* aParent            :in:      Parent menu
       
  2911                 const TDesC& aName        :in:      Menu name
       
  2912                 CStartedTestCase* aCaseContainer:in: Case container
       
  2913 
       
  2914     Return Values: CMenu*                           New menu
       
  2915 
       
  2916     Errors/Exceptions: Leaves if memory allocation fails
       
  2917                        Leaves if ConstructL leaves.
       
  2918 
       
  2919     Status: Draft
       
  2920 
       
  2921 -------------------------------------------------------------------------------
       
  2922 */
       
  2923 CCaseOperationMenu* CCaseOperationMenu::NewL( CConsoleMain* aConsole,
       
  2924                                  CMenu* aParent,
       
  2925                                  const TDesC& aName,
       
  2926                                  const CStartedTestCase* aCaseContainer
       
  2927                                )
       
  2928     {
       
  2929 
       
  2930     CCaseOperationMenu* self = new ( ELeave ) CCaseOperationMenu();
       
  2931     CleanupStack::PushL( self );
       
  2932     self->ConstructL( aConsole, aParent, aName, aCaseContainer );
       
  2933     CleanupStack::Pop( self );
       
  2934     return self;
       
  2935     
       
  2936     }
       
  2937 
       
  2938 /*
       
  2939 -------------------------------------------------------------------------------
       
  2940 
       
  2941     Class: CCaseOperationMenu
       
  2942 
       
  2943     Method: ConstructL
       
  2944 
       
  2945     Description: Second level constructor.
       
  2946 
       
  2947     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  2948                 CMenu* aParent            :in:      Parent menu
       
  2949                 const TDesC& aName        :in:      Menu name
       
  2950                 CStartedTestCase* aCaseContainer:in: Case container
       
  2951 
       
  2952     Return Values: None
       
  2953 
       
  2954     Errors/Exceptions: None
       
  2955 
       
  2956     Status: Draft
       
  2957 
       
  2958 -------------------------------------------------------------------------------
       
  2959 */
       
  2960 void CCaseOperationMenu::ConstructL( CConsoleMain* aConsole,
       
  2961                                      CMenu* aParent,
       
  2962                                      const TDesC& aName,
       
  2963                                      const CStartedTestCase* aCaseContainer
       
  2964                                    )
       
  2965     {
       
  2966 
       
  2967     CMenu::ConstructL( aConsole, aParent, aName); 
       
  2968     iCaseContainer = aCaseContainer;
       
  2969     
       
  2970     // Indicate that this menu contains prints, update when needed
       
  2971     iType = CUIStoreIf::EStatusExecuted;
       
  2972     
       
  2973     }
       
  2974 
       
  2975 
       
  2976 /*
       
  2977 -------------------------------------------------------------------------------
       
  2978 
       
  2979     Class: CMenu
       
  2980 
       
  2981     Method: ~CMenu
       
  2982 
       
  2983     Description: Destructor
       
  2984 
       
  2985     Parameters: None
       
  2986 
       
  2987     Return Values: None
       
  2988 
       
  2989     Errors/Exceptions: None
       
  2990 
       
  2991     Status: Draft
       
  2992     
       
  2993 -------------------------------------------------------------------------------
       
  2994 */
       
  2995 CCaseOperationMenu::~CCaseOperationMenu()
       
  2996     {
       
  2997     delete iView;
       
  2998     iView = 0;
       
  2999     }
       
  3000 
       
  3001 /*
       
  3002 -------------------------------------------------------------------------------
       
  3003 
       
  3004     Class: CCaseOperationMenu
       
  3005 
       
  3006     Method: ItemText
       
  3007 
       
  3008     Description: Returns menu item text
       
  3009 
       
  3010     Parameters: const TInt                :in:      Menu index
       
  3011 
       
  3012     Return Values: const TDesC&                     Menu line text
       
  3013 
       
  3014     Errors/Exceptions: None
       
  3015 
       
  3016     Status: Draft
       
  3017 
       
  3018 -------------------------------------------------------------------------------
       
  3019 */
       
  3020 TInt CCaseOperationMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  3021     {
       
  3022     
       
  3023     if( iCaseContainer->Status() & CUIStoreIf::EStatusRunning )
       
  3024         {
       
  3025         if( aArray.Append( KOutputViewDes ) != KErrNone )
       
  3026             {
       
  3027             return KErrNoMemory; 
       
  3028             }
       
  3029                 
       
  3030         // Set resume/pause text
       
  3031         if( iCaseContainer->UIEngineContainer().State() == 
       
  3032             CUIEngineContainer::EPaused )
       
  3033             {
       
  3034             if( aArray.Append( KResumeCaseDes ) != KErrNone )
       
  3035                 {
       
  3036                 return KErrNoMemory; 
       
  3037                 }
       
  3038             }
       
  3039         else
       
  3040             {
       
  3041             if( aArray.Append( KPauseCaseDes ) != KErrNone )
       
  3042                 {
       
  3043                 return KErrNoMemory; 
       
  3044                 }
       
  3045             }
       
  3046         if( aArray.Append( KAbortCaseDes ) != KErrNone )
       
  3047             {
       
  3048             return KErrNoMemory; 
       
  3049             }
       
  3050         }
       
  3051     else
       
  3052         {
       
  3053         if(aArray.Append(KRestartCaseDes) != KErrNone)
       
  3054             {
       
  3055             return KErrNoMemory; 
       
  3056             }
       
  3057         if( aArray.Append( KOutputViewDes ) != KErrNone )
       
  3058             {
       
  3059             return KErrNoMemory; 
       
  3060             }
       
  3061         }
       
  3062 
       
  3063     return KErrNone;
       
  3064 
       
  3065     }
       
  3066 
       
  3067 /*
       
  3068 -------------------------------------------------------------------------------
       
  3069     Class: CMenu
       
  3070 
       
  3071     Method: PrintMenuL
       
  3072 
       
  3073     Description: Prints the menu and test case specific information after that.
       
  3074 
       
  3075     Parameters: None
       
  3076 
       
  3077     Return Values: None
       
  3078 
       
  3079     Errors/Exceptions: Leaves if FormatL leaves
       
  3080 
       
  3081     Status: Draft
       
  3082     
       
  3083 -------------------------------------------------------------------------------
       
  3084 */
       
  3085 void CCaseOperationMenu::PrintMenuL( TUpdateType  aType )
       
  3086     {
       
  3087 
       
  3088     // Print menu
       
  3089     CMenu::PrintMenuL( aType );
       
  3090     
       
  3091     // Print the result description + result code
       
  3092     // If case is finished, print also result string
       
  3093     TInt state = iCaseContainer->Status();
       
  3094     if  ( ! ( state & CUIStoreIf::EStatusRunning ) )
       
  3095         {        
       
  3096 
       
  3097         TName resultLine;
       
  3098         
       
  3099         Print (_L(""));
       
  3100         resultLine.Append(_L("Result info: ") );
       
  3101 
       
  3102         if( state & CUIStoreIf::EStatusPassed )
       
  3103             {
       
  3104             resultLine.Append( _L("Passed" ) );
       
  3105             } 
       
  3106         else if( state & CUIStoreIf::EStatusFailed )
       
  3107             {
       
  3108             resultLine.Append( _L("Failed" ) );
       
  3109             } 
       
  3110         else if( state & CUIStoreIf::EStatusAborted )
       
  3111             {
       
  3112             resultLine.Append( _L("Aborted" ) );
       
  3113             } 
       
  3114         else if( state & CUIStoreIf::EStatusCrashed )
       
  3115             {
       
  3116             resultLine.Append( _L("Crashed" ) );
       
  3117             }
       
  3118         PrintMulti( resultLine );
       
  3119         resultLine.Zero();             
       
  3120 
       
  3121         // Print test results
       
  3122         if( !( ( state & CUIStoreIf::EStatusAborted ) || 
       
  3123                ( state & CUIStoreIf::EStatusCrashed ) || 
       
  3124                ( state & CUIStoreIf::EStatusPassed ) ) )
       
  3125             {
       
  3126 
       
  3127             resultLine.Format(_L("Result code %d"), 
       
  3128                 iCaseContainer->Result().iTestResult.iResult );
       
  3129             PrintMulti ( resultLine );            
       
  3130             }
       
  3131 
       
  3132         if( iCaseContainer->Result().iCaseExecutionResultType == 
       
  3133             TFullTestResult::ECaseErrorFromModule )
       
  3134             {
       
  3135             PrintMulti ( _L("Error from RunTestCase():"));
       
  3136             }
       
  3137 
       
  3138         // Print result descriptor if that is available
       
  3139         const TDesC& des = iCaseContainer->Result().iTestResult.iResultDes;
       
  3140         if ( des.Length() >0 )
       
  3141             {
       
  3142             PrintMulti(des);
       
  3143             }
       
  3144 
       
  3145         // Print abort code if that is available
       
  3146         if( ( state & CUIStoreIf::EStatusAborted ) ||
       
  3147             ( state & CUIStoreIf::EStatusCrashed ) )
       
  3148             {
       
  3149             // Print abort type, if that is available
       
  3150             TFullTestResult::TCaseExecutionResult res = 
       
  3151                 iCaseContainer->Result().iCaseExecutionResultType;
       
  3152             
       
  3153             if ( res == TFullTestResult::ECaseLeave ||
       
  3154                  res == TFullTestResult::ECasePanic ||
       
  3155                  res == TFullTestResult::ECaseException || 
       
  3156                  res == TFullTestResult::ECaseErrorFromModule ||
       
  3157                  res == TFullTestResult::ECaseSuicided )
       
  3158                 {
       
  3159                 TInt code = iCaseContainer->Result().iCaseExecutionResultCode;
       
  3160                 resultLine.Format(_L("Code %d (0x%x)"), code, code );
       
  3161                 PrintMulti ( resultLine );
       
  3162                 }
       
  3163             }
       
  3164 
       
  3165         // Print start and end times
       
  3166         const TInt KTimeFieldLength = 30;
       
  3167         TBuf<KTimeFieldLength> time;
       
  3168         _LIT(KDateString,"%-B%:0%J%:1%T%:2%S%.%*C4%:3%+B");
       
  3169 
       
  3170         resultLine = _L("Started:");
       
  3171         iCaseContainer->Result().iStartTime.FormatL(time,KDateString);
       
  3172         resultLine.Append(time);
       
  3173         PrintMulti (resultLine);
       
  3174 
       
  3175         resultLine = _L("Completed:");
       
  3176         iCaseContainer->Result().iEndTime.FormatL(time,KDateString);
       
  3177         
       
  3178         resultLine.Append(time);
       
  3179         PrintMulti (resultLine);
       
  3180 
       
  3181         }
       
  3182 
       
  3183     }
       
  3184 
       
  3185 /*
       
  3186 -------------------------------------------------------------------------------
       
  3187 
       
  3188     Class: CCaseOperationMenu
       
  3189 
       
  3190     Method: SelectL
       
  3191 
       
  3192     Description: Process keypresses in menu. Handle Enter and right arrow
       
  3193     here, others are handled in parent menu.
       
  3194 
       
  3195     Parameters: TKeyCode aSelection       :in:      Key
       
  3196                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  3197 
       
  3198     Return Values: CMenu*                           New menu
       
  3199 
       
  3200     Errors/Exceptions: None
       
  3201 
       
  3202     Status: Draft
       
  3203 
       
  3204 -------------------------------------------------------------------------------
       
  3205 */
       
  3206 CMenu* CCaseOperationMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  3207     {   
       
  3208 
       
  3209     MapKeyCode(aSelection);
       
  3210     
       
  3211     if (aSelection == EKeyEnter || aSelection == EKeyRightArrow )
       
  3212         {        
       
  3213         // restartOptionModifier is used because when test case is running
       
  3214         // restart option is not available (and visible) and that's why
       
  3215         // we need to modify switch by 1.
       
  3216         // When test case is finished, restart option becomes available
       
  3217         // and is put at the first place.
       
  3218         TInt restartOptionModifier = 0;
       
  3219         if(iCaseContainer->Status() & CUIStoreIf::EStatusRunning)
       
  3220             restartOptionModifier = 1;
       
  3221         
       
  3222         switch (iPosOnScreen + iFirst + restartOptionModifier)
       
  3223         {
       
  3224         case ERestartCase:
       
  3225             {
       
  3226             TInt index;
       
  3227             User::LeaveIfError(iMain->UIStore().StartTestCase(iCaseContainer->TestInfo(), index));
       
  3228             // Create output screen
       
  3229             CMenu* m = iMain->GetMainMenu()->CreateOutputViewL(iParent);
       
  3230             return m;
       
  3231             }
       
  3232         case EOutputView:
       
  3233             {
       
  3234             delete iView;
       
  3235             iView = 0;
       
  3236             iView = CCaseExecutionView::NewL( 
       
  3237                 iMain, 
       
  3238                 this, 
       
  3239                 iCaseContainer->TestInfo().TestCaseTitle(), 
       
  3240                 iCaseContainer );
       
  3241 
       
  3242             return iView;
       
  3243             }
       
  3244 
       
  3245         case EPauseResume:
       
  3246 
       
  3247             if( iCaseContainer->UIEngineContainer().State() == 
       
  3248                 CUIEngineContainer::ERunning )
       
  3249                 {    
       
  3250                 // Pausing a running case
       
  3251                 iCaseContainer->UIEngineContainer().PauseTest();
       
  3252 
       
  3253                 }
       
  3254             else if( iCaseContainer->UIEngineContainer().State() == 
       
  3255                      CUIEngineContainer::EPaused )
       
  3256                 {
       
  3257                 // Resuming a paused case
       
  3258                 iCaseContainer->UIEngineContainer().ResumeTest();
       
  3259 
       
  3260                 }
       
  3261             // No other possibilities
       
  3262             return this;
       
  3263 
       
  3264         case EAbortCase:
       
  3265             iCaseContainer->UIEngineContainer().CancelTest();
       
  3266             break;
       
  3267 
       
  3268         }
       
  3269         
       
  3270         return this;
       
  3271         }
       
  3272     else
       
  3273         {
       
  3274         return CMenu::SelectL(aSelection, aContinue);
       
  3275         }
       
  3276         
       
  3277     }
       
  3278 
       
  3279 
       
  3280 
       
  3281 /*
       
  3282 -------------------------------------------------------------------------------
       
  3283 
       
  3284     Class: CCaseExecutionView
       
  3285 
       
  3286     Method: NewL
       
  3287 
       
  3288     Description: Constructs new menu.
       
  3289 
       
  3290     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  3291                 CMenu* aParent            :in:      Parent menu
       
  3292                 const TDesC& aName        :in:      Menu name
       
  3293                 CStartedTestCase* aCase :in:      Case container
       
  3294 
       
  3295     Return Values: CMenu*                           New menu
       
  3296 
       
  3297     Errors/Exceptions: Leaves if memory allocation fails
       
  3298                        Leaves if ConstructL leaves.
       
  3299 
       
  3300     Status: Draft
       
  3301 
       
  3302 -------------------------------------------------------------------------------
       
  3303 */
       
  3304 CCaseExecutionView* CCaseExecutionView::NewL( CConsoleMain* aConsole,
       
  3305                                               CMenu* aParent,
       
  3306                                               const TDesC& aName,
       
  3307                                               const CStartedTestCase* aCase )
       
  3308     {
       
  3309 
       
  3310     CCaseExecutionView* self = new ( ELeave ) CCaseExecutionView();
       
  3311     CleanupStack::PushL( self );
       
  3312     self->ConstructL( aConsole, aParent, aName, aCase );
       
  3313     CleanupStack::Pop( self );
       
  3314     return self;
       
  3315     
       
  3316     }
       
  3317 
       
  3318 /*
       
  3319 -------------------------------------------------------------------------------
       
  3320 
       
  3321     Class: CCaseExecutionView
       
  3322 
       
  3323     Method: ConstructL
       
  3324 
       
  3325     Description: Second level constructor.
       
  3326 
       
  3327     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  3328                 CMenu* aParent            :in:      Parent menu
       
  3329                 const TDesC& aName        :in:      Menu name
       
  3330                 CStartedTestCase* aCase :in:      Case container
       
  3331 
       
  3332     Return Values: None
       
  3333 
       
  3334     Errors/Exceptions: Leaves if parent class ConstructL leaves
       
  3335 
       
  3336     Status: Draft
       
  3337 
       
  3338 -------------------------------------------------------------------------------
       
  3339 */
       
  3340 void CCaseExecutionView::ConstructL( CConsoleMain* aConsole,
       
  3341                                      CMenu* aParent,
       
  3342                                      const TDesC& aName,
       
  3343                                      const CStartedTestCase* aCase
       
  3344                                     )
       
  3345     {
       
  3346 
       
  3347     CMenu::ConstructL( aConsole, aParent, aName );
       
  3348 
       
  3349     iCase = aCase;
       
  3350     
       
  3351     // Indicate that this menu contains prints, update when needed
       
  3352     iType = CUIStoreIf::EPrintUpdate;
       
  3353 
       
  3354     iLine = 0;
       
  3355 
       
  3356     }
       
  3357 
       
  3358 /*
       
  3359 -------------------------------------------------------------------------------
       
  3360 
       
  3361     CCaseExecutionView
       
  3362 
       
  3363     Method: ~CCaseExecutionView
       
  3364 
       
  3365     Description: Destructor
       
  3366 
       
  3367     Parameters: None
       
  3368 
       
  3369     Return Values: None
       
  3370 
       
  3371     Errors/Exceptions: None
       
  3372 
       
  3373     Status: Draft
       
  3374 
       
  3375 -------------------------------------------------------------------------------
       
  3376 */
       
  3377 CCaseExecutionView::~CCaseExecutionView()
       
  3378     {
       
  3379     delete iLineTextBuf;
       
  3380 
       
  3381     }
       
  3382 
       
  3383 /*
       
  3384 -------------------------------------------------------------------------------
       
  3385     Class: CMenu
       
  3386 
       
  3387     Method: PrintMenuL
       
  3388 
       
  3389     Description: Prints the menu. Show the test status and the test case
       
  3390     print statements.
       
  3391 
       
  3392     Parameters: None
       
  3393 
       
  3394     Return Values: None
       
  3395 
       
  3396     Errors/Exceptions: None
       
  3397 
       
  3398     Status: Draft
       
  3399 
       
  3400 -------------------------------------------------------------------------------
       
  3401 */
       
  3402 void CCaseExecutionView::PrintMenuL( TUpdateType  /*aType*/ )
       
  3403     {
       
  3404     
       
  3405     if( iShowLine )
       
  3406         {
       
  3407         // User want to see whole line 
       
  3408         iConsole->ClearScreen();
       
  3409         this->PrintMulti( iLineTextBuf->Des() );
       
  3410         return;
       
  3411         }
       
  3412 
       
  3413     // Print the status
       
  3414     TName tmp;
       
  3415     TInt state = iCase->Status();
       
  3416     if( state & CUIStoreIf::EStatusRunning )
       
  3417         {
       
  3418         if( iCase->UIEngineContainer().State() == 
       
  3419             CUIEngineContainer::EPaused )
       
  3420             {
       
  3421             tmp = _L("Paused");
       
  3422             }
       
  3423         else
       
  3424             {
       
  3425             tmp = _L("Running");
       
  3426             }
       
  3427         }
       
  3428     else if( state & CUIStoreIf::EStatusPassed )
       
  3429         {
       
  3430         tmp = _L("Passed");
       
  3431         }
       
  3432     else if( state & CUIStoreIf::EStatusFailed )
       
  3433         {
       
  3434         tmp = _L("Failed");
       
  3435         }
       
  3436     else if( state & CUIStoreIf::EStatusAborted )
       
  3437         {
       
  3438         tmp = _L("Aborted");
       
  3439         }
       
  3440     else if( state & CUIStoreIf::EStatusCrashed )
       
  3441         {
       
  3442         tmp = _L("Aborted");
       
  3443         }
       
  3444     else
       
  3445         {
       
  3446         tmp = _L("Unknown");
       
  3447         }
       
  3448     
       
  3449     // Clear screen.
       
  3450     iConsole->ClearScreen();
       
  3451     TBuf<KMaxLineLength> line;
       
  3452 
       
  3453     line.Append(_L(" : "));
       
  3454     LimitedAppend(line, iCase->TestInfo().TestCaseTitle() );
       
  3455     Print( line );
       
  3456 
       
  3457     const RPointerArray<CTestProgress>& prints = iCase->PrintArray();
       
  3458 
       
  3459     Recalculate( prints.Count() );
       
  3460 
       
  3461     // Print the print statements.
       
  3462     for ( TInt i = iFirst; i <= iLast; i++ )
       
  3463         {
       
  3464         line.Zero();
       
  3465         if( iLine == i )
       
  3466             {
       
  3467             line = _L( "*" ); // For indicating current line
       
  3468             }
       
  3469         line.Append( prints[i]->iDescription );
       
  3470         line.Append(_L(" : "));
       
  3471         LimitedAppend(line, prints[i]->iText );
       
  3472 
       
  3473         // Print the line
       
  3474         TSize screenSize;
       
  3475         //screenSize = iConsole->ScreenSize();
       
  3476         iConsole->Size(screenSize);
       
  3477         Print ( line.Left(screenSize.iWidth ) );
       
  3478         }
       
  3479 
       
  3480     }
       
  3481 
       
  3482 /*
       
  3483 -------------------------------------------------------------------------------
       
  3484 
       
  3485     Class: CCaseExecutionView
       
  3486 
       
  3487     Method: SelectL
       
  3488 
       
  3489     Description: Process keypresses in menu. Either updates position in
       
  3490     menu or returns new menu.
       
  3491 
       
  3492     Parameters: TKeyCode aSelection: in: Key
       
  3493                 TBool& aContinue: out: Has user pressed "Quit"
       
  3494 
       
  3495     Return Values: CMenu* New menu
       
  3496 
       
  3497     Errors/Exceptions: None
       
  3498 
       
  3499     Status: Draft
       
  3500 
       
  3501 -------------------------------------------------------------------------------
       
  3502 */
       
  3503 CMenu* CCaseExecutionView::SelectL( TKeyCode aSelection, TBool& /*aContinue*/ )
       
  3504     {
       
  3505     iShowLine = EFalse;
       
  3506     MapKeyCode(aSelection);
       
  3507 
       
  3508     // Take prints
       
  3509     const RPointerArray<CTestProgress>& prints = iCase->PrintArray();
       
  3510 
       
  3511     switch( aSelection  )
       
  3512         {        
       
  3513         case EKeyEnter:
       
  3514         case EKeyRightArrow:
       
  3515             {
       
  3516             // Check that not out of range(too many EKeyUpArrow or EKeyDownArrow)
       
  3517             if( iLine >= prints.Count() || iLine < 0)
       
  3518                 {
       
  3519                 // do nothing
       
  3520                 break;
       
  3521                 }
       
  3522             TInt extra = 3; // ' : '
       
  3523             TInt length( 0 );
       
  3524             length = length + prints[iLine]->iDescription.Length();
       
  3525             length = length + prints[iLine]->iText.Length();
       
  3526             // Selected print line in seperate(operation will do in
       
  3527             // CCaseExecutionView::PrintMenuL() method )
       
  3528             delete iLineTextBuf;
       
  3529 			iLineTextBuf = NULL;
       
  3530             TRAPD( ret, iLineTextBuf = HBufC::NewL( length + extra ) );
       
  3531             if( ret != KErrNone )
       
  3532                 {
       
  3533                 User::InfoPrint( _L("Line show failed, maybe out of memory!!!") );
       
  3534                 break;
       
  3535                 }
       
  3536             TPtr ptr = iLineTextBuf->Des();
       
  3537             ptr.Copy( prints[iLine]->iDescription );
       
  3538             ptr.Append( _L( " : " ) );
       
  3539             ptr.Append( prints[iLine]->iText );
       
  3540             iShowLine = ETrue;
       
  3541             break;
       
  3542             }
       
  3543         case EKeyLeftArrow:
       
  3544             {
       
  3545             return iParent;
       
  3546             }
       
  3547 		// Go down
       
  3548 		case EKeyDownArrow:
       
  3549 			{
       
  3550 			if ( iFirst + iPosOnScreen == iItemCount - 1 )
       
  3551 				{
       
  3552 				// If end of the list, go to beginning
       
  3553 				iPosOnScreen = 0;
       
  3554 				iFirst = 0;
       
  3555 				iLast = iScreenSize;
       
  3556 				if ( iLast > iItemCount - 1 )
       
  3557 					{
       
  3558 					iLast = iItemCount - 1;
       
  3559 					}
       
  3560 				iLine = 0;
       
  3561 				}
       
  3562 			else 
       
  3563 				{
       
  3564 				if ( iPosOnScreen == iScreenSize )
       
  3565 					{
       
  3566 					iLast++;
       
  3567 					iFirst++;
       
  3568 					}
       
  3569 				else
       
  3570 					{
       
  3571 					// Going down "in-screen", no need to update items
       
  3572 					iPosOnScreen++;
       
  3573 					}
       
  3574 				iLine++;
       
  3575 				}			
       
  3576 			break;
       
  3577 			}
       
  3578 			
       
  3579 		// Go Up
       
  3580 		case EKeyUpArrow:
       
  3581 			{
       
  3582 			if ( iFirst + iPosOnScreen == 0 )
       
  3583 				{
       
  3584 				// If in the beginning of the list
       
  3585 
       
  3586 				iLast = iItemCount - 1;
       
  3587 				iFirst = iLast - iScreenSize;
       
  3588 				if ( iFirst < 0 )
       
  3589 					{
       
  3590 					iFirst = 0;            	
       
  3591 					}
       
  3592 				iPosOnScreen = iLast - iFirst;
       
  3593 				iLine = iItemCount - 1;
       
  3594 				}
       
  3595 			else 
       
  3596 				{
       
  3597 				if ( iPosOnScreen == 0 )
       
  3598 					{
       
  3599 					iLast--;
       
  3600 					iFirst--;
       
  3601 					}
       
  3602 				else
       
  3603 					{
       
  3604 					iPosOnScreen--;
       
  3605 					}
       
  3606 				iLine--;
       
  3607 			}
       
  3608 			break;
       
  3609 			}
       
  3610 		// Additional keys
       
  3611 		case EKeyHome:
       
  3612 		case '3':
       
  3613 			iPosOnScreen = 0;
       
  3614 			iLine = 0;
       
  3615 			iFirst = 0;
       
  3616 			iLast = iScreenSize;
       
  3617 
       
  3618 			if ( iLast > iItemCount - 1 )
       
  3619 				{
       
  3620 				iLast = iItemCount - 1;
       
  3621 				}
       
  3622 			break;
       
  3623 
       
  3624 		case EKeyEnd:
       
  3625 		case '9':
       
  3626 			iLast = iItemCount - 1;
       
  3627 			iFirst = iLast - iScreenSize;
       
  3628 			iLine = iItemCount - 1;
       
  3629 			
       
  3630 			if ( iFirst < 0 )
       
  3631 				{
       
  3632 				iFirst = 0;
       
  3633 				}
       
  3634 			iPosOnScreen = iLast - iFirst;        
       
  3635 			break;
       
  3636 
       
  3637 		case EKeyPageUp:
       
  3638 		case '1':
       
  3639 			iFirst = iFirst - iScreenSize;
       
  3640 			iLast = iLast - iScreenSize;
       
  3641 
       
  3642 			if ( iFirst < 0 )
       
  3643 				{
       
  3644 				iFirst = 0;
       
  3645 				iLast = iScreenSize;
       
  3646 				if ( iLast > iItemCount - 1 )
       
  3647 					{
       
  3648 					iLast = iItemCount - 1;
       
  3649 					}
       
  3650 				iPosOnScreen = 0;
       
  3651 				}
       
  3652 			
       
  3653 			iLine = iLine - iScreenSize;
       
  3654 			if ( iLine < 0 )
       
  3655 				{
       
  3656 				iLine = 0;
       
  3657 				}
       
  3658 			break;
       
  3659 
       
  3660 		case EKeyPageDown:
       
  3661 		case '7':
       
  3662 			iFirst = iFirst + iScreenSize;
       
  3663 			iLast = iLast + iScreenSize;
       
  3664 
       
  3665 			// Going too far
       
  3666 			if ( iLast > iItemCount - 1 )
       
  3667 				{
       
  3668 				iLast = iItemCount - 1;
       
  3669 				iFirst = iLast - iScreenSize;
       
  3670 				if ( iFirst < 0 )
       
  3671 					{
       
  3672 					iFirst = 0;
       
  3673 					}
       
  3674 				iPosOnScreen = iLast - iFirst;
       
  3675 				}
       
  3676 
       
  3677 			iLine = iLine + iScreenSize;
       
  3678 			if ( iLine > iItemCount - 1 )
       
  3679 				{
       
  3680 				iLine = iItemCount - 1;
       
  3681 				}
       
  3682 			break;
       
  3683         default:
       
  3684             {
       
  3685             break;
       
  3686             }
       
  3687         }
       
  3688     
       
  3689     return this;
       
  3690 
       
  3691     }
       
  3692 
       
  3693 /*
       
  3694 -------------------------------------------------------------------------------
       
  3695 
       
  3696     Class: CTestSetMenu
       
  3697 
       
  3698     Method: NewL
       
  3699 
       
  3700     Description: Constructs new menu.
       
  3701 
       
  3702     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  3703                 CMenu* aParent            :in:      Parent menu
       
  3704                 const TDesC& aName        :in:      Menu name
       
  3705 
       
  3706     Return Values: CMenu*                           New menu
       
  3707 
       
  3708     Errors/Exceptions: Leaves if memory allocation fails
       
  3709                        Leaves if ConstructL leaves.
       
  3710 
       
  3711     Status: Draft
       
  3712 
       
  3713 -------------------------------------------------------------------------------
       
  3714 */
       
  3715 CTestSetMenu* CTestSetMenu::NewL( CConsoleMain* aConsole,
       
  3716                                         CMenu* aParent,
       
  3717                                         const TDesC& aName )
       
  3718     {    
       
  3719 
       
  3720     CTestSetMenu* self = new ( ELeave ) CTestSetMenu();
       
  3721     CleanupStack::PushL( self );
       
  3722     self->ConstructL( aConsole, aParent, aName );
       
  3723     CleanupStack::Pop( self );
       
  3724     return self;
       
  3725     
       
  3726     }
       
  3727        
       
  3728 /*
       
  3729 -------------------------------------------------------------------------------
       
  3730 
       
  3731     Class: CTestSetMenu
       
  3732 
       
  3733     Method: CTestSetMenu
       
  3734 
       
  3735     Description: Constructor
       
  3736 
       
  3737     Parameters: None
       
  3738 
       
  3739     Return Values: None
       
  3740 
       
  3741     Errors/Exceptions: None
       
  3742 
       
  3743     Status: Draft
       
  3744 
       
  3745 -------------------------------------------------------------------------------
       
  3746 */
       
  3747 CTestSetMenu::CTestSetMenu():
       
  3748     iTestSetCreated( EFalse )
       
  3749     {
       
  3750     
       
  3751     iTestSetName.Copy( KDefaultSetName );    
       
  3752     
       
  3753     }
       
  3754     
       
  3755 /*
       
  3756 -------------------------------------------------------------------------------
       
  3757 
       
  3758     Class: CTestSetMenu
       
  3759 
       
  3760     Method: ~CTestSetMenu
       
  3761 
       
  3762     Description: Destructor
       
  3763 
       
  3764     Parameters: None
       
  3765 
       
  3766     Return Values: None
       
  3767 
       
  3768     Errors/Exceptions: None
       
  3769 
       
  3770     Status: Draft
       
  3771     
       
  3772 -------------------------------------------------------------------------------
       
  3773 */
       
  3774 CTestSetMenu::~CTestSetMenu()
       
  3775     {
       
  3776     
       
  3777     delete iSubMenu;
       
  3778     iSubMenu = 0;
       
  3779     
       
  3780     }
       
  3781 
       
  3782 /*
       
  3783 -------------------------------------------------------------------------------
       
  3784 
       
  3785     Class: CTestSetMenu
       
  3786 
       
  3787     Method: ConstructL
       
  3788 
       
  3789     Description: Second level constructor. 
       
  3790 
       
  3791     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  3792                 CMenu* aParent            :in:      Parent menu
       
  3793                 const TDesC& aName        :in:      Menu name
       
  3794 
       
  3795     Return Values: None
       
  3796 
       
  3797     Errors/Exceptions: Leaves if parent class ConstructL leaves
       
  3798                        Leaves if module can't be appended to list
       
  3799 
       
  3800     Status: Draft
       
  3801 
       
  3802 -------------------------------------------------------------------------------
       
  3803 */
       
  3804 void CTestSetMenu::ConstructL( CConsoleMain* aConsole,
       
  3805                                   CMenu* aParent,
       
  3806                                   const TDesC& aName
       
  3807                                  )
       
  3808     {
       
  3809 
       
  3810     CMenu::ConstructL( aConsole, aParent, aName);
       
  3811    
       
  3812     }
       
  3813 
       
  3814 /*
       
  3815 -------------------------------------------------------------------------------
       
  3816 
       
  3817     Class: CTestSetMenu
       
  3818 
       
  3819     Method: SetTestSetName
       
  3820 
       
  3821     Description: Set test set name.
       
  3822 
       
  3823     Parameters: const TFileName& aTestSetName: in: Test set name
       
  3824 
       
  3825     Return Values: None
       
  3826     
       
  3827     Errors/Exceptions: None
       
  3828 
       
  3829     Status: Draft
       
  3830 
       
  3831 -------------------------------------------------------------------------------
       
  3832 */
       
  3833 void CTestSetMenu::SetTestSetFileName( const TFileName& aTestSetName )
       
  3834     {
       
  3835     
       
  3836     iTestSetName.Copy( aTestSetName );    
       
  3837     
       
  3838     }
       
  3839         
       
  3840 /*
       
  3841 -------------------------------------------------------------------------------
       
  3842 
       
  3843     Class: CTestSetMenu
       
  3844 
       
  3845     Method: ItemText
       
  3846 
       
  3847     Description: Returns menu item text.
       
  3848 
       
  3849     Parameters: const TInt                :in:      Menu index
       
  3850 
       
  3851     Return Values: const TDesC&                     Menu line text
       
  3852 
       
  3853     Errors/Exceptions: None
       
  3854 
       
  3855     Status: Draft
       
  3856 
       
  3857 -------------------------------------------------------------------------------
       
  3858 */
       
  3859 TInt CTestSetMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  3860     {
       
  3861     
       
  3862     if( !iTestSetCreated )
       
  3863         {
       
  3864         if( aArray.Append( KSetCreate ) != KErrNone )
       
  3865             {
       
  3866             return KErrNoMemory;
       
  3867             }
       
  3868         if( aArray.Append( KSetLoad ) != KErrNone )
       
  3869             {
       
  3870             return KErrNoMemory;
       
  3871             }        
       
  3872         }
       
  3873     else
       
  3874         {
       
  3875         if( aArray.Append( KSetShow ) != KErrNone )
       
  3876             {
       
  3877             return KErrNoMemory;
       
  3878             }                
       
  3879         if( aArray.Append( KSetStartSeq ) != KErrNone )
       
  3880             {
       
  3881             return KErrNoMemory;
       
  3882             }                
       
  3883         if( aArray.Append( KSetStartPar ) != KErrNone )
       
  3884             {
       
  3885             return KErrNoMemory;
       
  3886             }
       
  3887         if( aArray.Append( KSetRemove ) != KErrNone )
       
  3888             {
       
  3889             return KErrNoMemory;
       
  3890             }                
       
  3891         if( aArray.Append( KSetSave ) != KErrNone )
       
  3892             {
       
  3893             return KErrNoMemory;
       
  3894             }                
       
  3895         if( aArray.Append( KSetCaseAdd ) != KErrNone )
       
  3896             {
       
  3897             return KErrNoMemory;
       
  3898             }                
       
  3899         if( aArray.Append( KSetCaseRemove ) != KErrNone )
       
  3900             {
       
  3901             return KErrNoMemory;
       
  3902             }                
       
  3903         if( aArray.Append( KSetStartSeqNotRun ) != KErrNone )
       
  3904             {
       
  3905             return KErrNoMemory;
       
  3906             }                
       
  3907         }
       
  3908         
       
  3909     return KErrNone; 
       
  3910 
       
  3911     }
       
  3912 
       
  3913 /*
       
  3914 -------------------------------------------------------------------------------
       
  3915     Class: CTestSetMenu
       
  3916 
       
  3917     Method: PrintMenuL
       
  3918 
       
  3919     Description: Prints the menu
       
  3920 
       
  3921     Parameters: None
       
  3922 
       
  3923     Return Values: None
       
  3924 
       
  3925     Errors/Exceptions: None
       
  3926 
       
  3927     Status: Draft
       
  3928     
       
  3929 -------------------------------------------------------------------------------
       
  3930 */
       
  3931 void CTestSetMenu::PrintMenuL( TUpdateType aType )
       
  3932     {
       
  3933     
       
  3934     if( iTestSetCreated )
       
  3935         {
       
  3936         RRefArray<CTestSetInfo> setInfos;
       
  3937         TInt ret = iMain->UIStore().TestSets( setInfos );
       
  3938 
       
  3939         CMenu::PrintMenuL( aType );
       
  3940 
       
  3941         if( (  ret != KErrNone ) ||
       
  3942             ( setInfos.Count() != 1 ) )
       
  3943             {
       
  3944             // Should never ever happen
       
  3945             User::Panic( KTestSetMenu, KErrGeneral );
       
  3946             return;
       
  3947             }
       
  3948         const CTestSetInfo& set = setInfos[0];
       
  3949         setInfos.Reset();
       
  3950         setInfos.Close();
       
  3951         
       
  3952         const RRefArray<const CTestInfo> testCases = set.TestCases();
       
  3953         
       
  3954         TBuf<KMaxLineLength> line;
       
  3955         TInt count = testCases.Count();
       
  3956         for(TInt i = 0; i < count && i + ESetLAST <= iScreenSize; i++)
       
  3957             {
       
  3958             line = _L("    ");
       
  3959             LimitedAppend ( line, testCases[i].TestCaseTitle() );
       
  3960 
       
  3961             // Print the line
       
  3962             Print(line);
       
  3963             }
       
  3964         }
       
  3965     else
       
  3966         {
       
  3967         CMenu::PrintMenuL( aType );
       
  3968         }    
       
  3969     
       
  3970     }
       
  3971     
       
  3972 /*
       
  3973 -------------------------------------------------------------------------------
       
  3974 
       
  3975     Class: CTestSetMenu
       
  3976 
       
  3977     Method: SelectL
       
  3978 
       
  3979     Description: Process keypresses in menu. Handle right arrow and enter
       
  3980                  here, others in parent menu.
       
  3981 
       
  3982     Parameters: TKeyCode aSelection       :in:      Key
       
  3983                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  3984 
       
  3985     Return Values: CMenu*                           New menu
       
  3986 
       
  3987     Errors/Exceptions: None
       
  3988 
       
  3989     Status: Draft
       
  3990 
       
  3991 -------------------------------------------------------------------------------
       
  3992 */
       
  3993 CMenu* CTestSetMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  3994     {
       
  3995     
       
  3996     MapKeyCode(aSelection);    
       
  3997     
       
  3998     if( ( aSelection != EKeyRightArrow ) &&
       
  3999         ( aSelection != EKeyEnter ) )
       
  4000         {
       
  4001         return CMenu::SelectL( aSelection, aContinue );
       
  4002         }            
       
  4003     
       
  4004     TInt ret = KErrNone;        
       
  4005     if( !iTestSetCreated )
       
  4006         {
       
  4007         switch( iPosOnScreen )
       
  4008             {
       
  4009             case ESetCreate:
       
  4010                 ret = iMain->UIStore().CreateTestSet( iTestSetName );
       
  4011                 if( ret != KErrNone )
       
  4012                     {
       
  4013                     User::InfoPrint( _L("Test set creation failed") );
       
  4014                     }
       
  4015                 break;
       
  4016             case ESetLoad: 
       
  4017             	return iItems[0];
       
  4018             } 
       
  4019         if( ret == KErrNone )
       
  4020             {
       
  4021             iTestSetCreated = ETrue;
       
  4022             }      
       
  4023         }
       
  4024     else
       
  4025         {
       
  4026         CStartedTestSet::TSetType setType = CStartedTestSet::ESetSequential;
       
  4027         switch( iPosOnScreen )
       
  4028             {
       
  4029             case ESetShow:   
       
  4030             // Add the test sets menu
       
  4031                 delete iSubMenu;
       
  4032                 iSubMenu = 0;
       
  4033                 iSubMenu = CStartedTestSetMenu::NewL( iMain, 
       
  4034                                         this, 
       
  4035                                         _L("Started test sets menu"));
       
  4036                 return iSubMenu;
       
  4037             case ESetRemove: 
       
  4038                 ret = iMain->UIStore().RemoveTestSet( iTestSetName );
       
  4039                 if( ret != KErrNone )
       
  4040                     {
       
  4041                     User::InfoPrint( _L("Test set creation failed") );
       
  4042                     }
       
  4043                 iTestSetCreated = EFalse;  
       
  4044                 break;
       
  4045             case ESetCaseAdd:   
       
  4046                 delete iSubMenu;
       
  4047                 iSubMenu = 0;
       
  4048                 iSubMenu = CTestSetAddCaseMenu::NewL( 
       
  4049                                 iMain, 
       
  4050                                 this, 
       
  4051                                 _L("Add test cases to test set"),
       
  4052                                 iTestSetName );
       
  4053                                 
       
  4054                 return iSubMenu;
       
  4055             case ESetCaseRemove: 
       
  4056                 delete iSubMenu;
       
  4057                 iSubMenu = 0;
       
  4058                 iSubMenu =  CTestSetRemoveCaseMenu::NewL( 
       
  4059                                 iMain, 
       
  4060                                 this, 
       
  4061                                 _L("Remove test cases from test set"),
       
  4062                                 iTestSetName );
       
  4063                                 
       
  4064                                 
       
  4065                 return iSubMenu;  
       
  4066             case ESetSave: 
       
  4067                 ret = iMain->UIStore().SaveTestSet( iTestSetName );
       
  4068                 if( ret != KErrNone )
       
  4069                     {
       
  4070                     User::InfoPrint( _L("Test set saving failed") );
       
  4071                     }   
       
  4072                 break;
       
  4073   
       
  4074   			default:          
       
  4075 //            case ESetStartPar:   
       
  4076 //                setType = CStartedTestSet::ESetParallel;
       
  4077 //            case ESetStartSeq: 
       
  4078             //case ESetStartRep: 
       
  4079             	if( iPosOnScreen == ESetStartPar )
       
  4080                   {
       
  4081 	            		setType = CStartedTestSet::ESetParallel;
       
  4082                   }
       
  4083               if( iPosOnScreen == ESetStartSeq || iPosOnScreen == ESetStartSeqNotRun)
       
  4084 	                {
       
  4085 	                RRefArray<CTestSetInfo> setInfos;
       
  4086 	                ret = iMain->UIStore().TestSets( setInfos );
       
  4087 	                if( (  ret != KErrNone ) ||
       
  4088 	                    ( setInfos.Count() != 1 ) )
       
  4089 	                    {
       
  4090 	                    // Should never ever happen
       
  4091 	                    User::Panic( KTestSetMenu, KErrGeneral );
       
  4092 	                    }
       
  4093 	                const CTestSetInfo& set = setInfos[0];
       
  4094 	                setInfos.Reset();
       
  4095 	                setInfos.Close();
       
  4096 	                
       
  4097 	                TInt index;
       
  4098 	                ret = KErrGeneral;
       
  4099 	                if(iPosOnScreen == ESetStartSeq)
       
  4100 	                    {
       
  4101                         ret = iMain->UIStore().StartTestSet(set, index, setType);
       
  4102                         }
       
  4103                     else if(iPosOnScreen == ESetStartSeqNotRun)
       
  4104                         {
       
  4105 	                    ret = iMain->UIStore().StartTestSet(set, index, setType, ETrue);
       
  4106 	                    }
       
  4107 	                if( ret != KErrNone )
       
  4108 	                    {
       
  4109 	                    User::InfoPrint( _L("Test set starting failed") );
       
  4110 	                    }                 
       
  4111 	                }    
       
  4112                 break;
       
  4113             }
       
  4114         }
       
  4115         
       
  4116     return this;
       
  4117 
       
  4118     }
       
  4119 /**
       
  4120 -------------------------------------------------------------------------------
       
  4121 
       
  4122 Class: CTestSetChoiceMenu
       
  4123 
       
  4124 Method: NewL
       
  4125 
       
  4126 Description: Constructs new menu.
       
  4127 
       
  4128 Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4129             CMenu* aParent            :in:      Parent menu
       
  4130             const TDesC& aName        :in:      Menu name
       
  4131 
       
  4132 Return Values: CMenu*                           New menu
       
  4133 
       
  4134 Errors/Exceptions: Leaves if memory allocation fails
       
  4135                    Leaves if ConstructL leaves.
       
  4136 
       
  4137 Status: Draft
       
  4138 
       
  4139 -------------------------------------------------------------------------------
       
  4140 */
       
  4141 CTestSetChoiceMenu* CTestSetChoiceMenu::NewL( CConsoleMain* aConsole,
       
  4142                                     CMenu* aParent,
       
  4143                                     const TDesC& aName )
       
  4144 {    
       
  4145 
       
  4146 	CTestSetChoiceMenu* self = new ( ELeave ) CTestSetChoiceMenu();
       
  4147 	CleanupStack::PushL( self );
       
  4148 	self->ConstructL( aConsole, aParent, aName );
       
  4149 	CleanupStack::Pop( self );
       
  4150 	return self;
       
  4151 
       
  4152 }
       
  4153 /*
       
  4154 -------------------------------------------------------------------------------
       
  4155 
       
  4156     Class: CTestSetChoiceMenu
       
  4157 
       
  4158     Method: CTestSetChoiceMenu
       
  4159 
       
  4160     Description: Constructor
       
  4161 
       
  4162     Parameters: None
       
  4163 
       
  4164     Return Values: None
       
  4165 
       
  4166     Errors/Exceptions: None
       
  4167 
       
  4168     Status: Draft
       
  4169 
       
  4170 -------------------------------------------------------------------------------
       
  4171 */
       
  4172 CTestSetChoiceMenu::CTestSetChoiceMenu()
       
  4173     
       
  4174     {
       
  4175 
       
  4176     }
       
  4177 
       
  4178 /*
       
  4179 -------------------------------------------------------------------------------
       
  4180 
       
  4181     Class: CTestSetChoiceMenu
       
  4182 
       
  4183     Method: ~CTestSetChoiceMenu
       
  4184 
       
  4185     Description: Destructor
       
  4186 
       
  4187     Parameters: None
       
  4188 
       
  4189     Return Values: None
       
  4190 
       
  4191     Errors/Exceptions: None
       
  4192 
       
  4193     Status: Draft
       
  4194     
       
  4195 -------------------------------------------------------------------------------
       
  4196 */
       
  4197 CTestSetChoiceMenu::~CTestSetChoiceMenu()
       
  4198     {
       
  4199     
       
  4200     
       
  4201 
       
  4202     iFileList.ResetAndDestroy();
       
  4203     iFileList.Close();
       
  4204 
       
  4205     
       
  4206     }
       
  4207 
       
  4208 /*
       
  4209 -------------------------------------------------------------------------------
       
  4210 
       
  4211     Class: CTestSetChoiceMenu
       
  4212 
       
  4213     Method: ConstructL
       
  4214 
       
  4215     Description: Second level constructor. 
       
  4216 
       
  4217     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4218                 CMenu* aParent            :in:      Parent menu
       
  4219                 const TDesC& aName        :in:      Menu name
       
  4220 
       
  4221     Return Values: None
       
  4222 
       
  4223     Errors/Exceptions: Leaves if parent class ConstructL leaves
       
  4224                        Leaves if module can't be appended to list
       
  4225 
       
  4226     Status: Draft
       
  4227 
       
  4228 -------------------------------------------------------------------------------
       
  4229 */
       
  4230 void CTestSetChoiceMenu::ConstructL( CConsoleMain* aConsole,
       
  4231                                   CMenu* aParent,
       
  4232                                   const TDesC& aName
       
  4233                                  )
       
  4234     {
       
  4235 
       
  4236     CMenu::ConstructL( aConsole, aParent, aName);    
       
  4237     }
       
  4238 
       
  4239 /*
       
  4240 -------------------------------------------------------------------------------
       
  4241 
       
  4242     Class: CTestSetChoiceMenu
       
  4243 
       
  4244     Method: ItemText
       
  4245 
       
  4246     Description: Returns menu item text.
       
  4247 
       
  4248     Parameters: const TInt                :in:      Menu index
       
  4249 
       
  4250     Return Values: const TDesC&                     Menu line text
       
  4251 
       
  4252     Errors/Exceptions: None
       
  4253 
       
  4254     Status: Draft
       
  4255 
       
  4256 -------------------------------------------------------------------------------
       
  4257 */
       
  4258 TInt CTestSetChoiceMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  4259     {
       
  4260 
       
  4261    TInt ret = iMain->UIStore().GetTestSetsList( aArray );
       
  4262    TRAPD( err,
       
  4263 	//Assign aArray to iFileList, it is used in LoadTestSet
       
  4264    for( TInt i=0 ; i < aArray.Count(); i++)
       
  4265 	  {
       
  4266 	  iFileList.AppendL(aArray[i].AllocL());
       
  4267 	  }
       
  4268      ); // TRAPD
       
  4269    return err;       
       
  4270     }
       
  4271 
       
  4272 /*
       
  4273 -------------------------------------------------------------------------------
       
  4274     Class: CTestSetChoiceMenu
       
  4275 
       
  4276     Method: PrintMenuL
       
  4277 
       
  4278     Description: Prints the menu
       
  4279 
       
  4280     Parameters: None
       
  4281 
       
  4282     Return Values: None
       
  4283 
       
  4284     Errors/Exceptions: None
       
  4285 
       
  4286     Status: Draft
       
  4287     
       
  4288 -------------------------------------------------------------------------------
       
  4289 */
       
  4290 void CTestSetChoiceMenu::PrintMenuL( TUpdateType aType )
       
  4291     {
       
  4292     
       
  4293     iUpdateType = aType;
       
  4294     
       
  4295     TBuf<KMaxLineLength> line;
       
  4296     
       
  4297     // Clear display
       
  4298     iConsole->ClearScreen();
       
  4299 
       
  4300     // Print menu title
       
  4301     Print( Name() );
       
  4302     
       
  4303     RRefArray<TDesC> texts;
       
  4304     if(  iMain->UIStore().GetTestSetsList( texts ) != KErrNone )
       
  4305         {
       
  4306         return;
       
  4307         }
       
  4308     
       
  4309     TInt oldItemCount = iItemCount;
       
  4310      
       
  4311     iItemCount = texts.Count();
       
  4312 
       
  4313     // If first time in menu, update start and end positions
       
  4314     if( (iFirst == iLast) ||        // First time here..
       
  4315         ( iLast >= iItemCount ) ||
       
  4316         ( oldItemCount != iItemCount ) )      // Menu size changed
       
  4317         {
       
  4318         iLast = iItemCount - 1;
       
  4319         iPosOnScreen = 0;
       
  4320 
       
  4321         // If "overflow", then adjust the end
       
  4322         if (iLast > iScreenSize )
       
  4323             {
       
  4324             iLast = iScreenSize;
       
  4325             }
       
  4326         }
       
  4327     
       
  4328     // Print items
       
  4329     for ( TInt i = iFirst; i <= iLast; i++ )
       
  4330         {
       
  4331         line.Zero();
       
  4332         
       
  4333         // Append text before line
       
  4334         AppendBefore( i, line );
       
  4335 
       
  4336         // Get the menu line
       
  4337         LimitedAppend ( line, texts[i] );
       
  4338 
       
  4339         // Print the line
       
  4340         Print(line);
       
  4341 
       
  4342         }
       
  4343     texts.Close();
       
  4344 
       
  4345     }
       
  4346 
       
  4347 /*
       
  4348 -------------------------------------------------------------------------------
       
  4349 
       
  4350     Class: CTestSetChoiceMenu
       
  4351 
       
  4352     Method: SelectL
       
  4353 
       
  4354     Description: Process keypresses in menu. Handle right arrow and enter
       
  4355                  here, others in parent menu.
       
  4356 
       
  4357     Parameters: TKeyCode aSelection       :in:      Key
       
  4358                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  4359 
       
  4360     Return Values: CMenu*                           New menu
       
  4361 
       
  4362     Errors/Exceptions: None
       
  4363 
       
  4364     Status: Draft
       
  4365 
       
  4366 -------------------------------------------------------------------------------
       
  4367 */
       
  4368 CMenu* CTestSetChoiceMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  4369     {
       
  4370     
       
  4371     //return CMenu::SelectL( aSelection, aContinue );    
       
  4372     //return iParent;
       
  4373 	    MapKeyCode(aSelection);
       
  4374 	    TInt ret = 0;
       
  4375     
       
  4376         switch ( aSelection )
       
  4377             {
       
  4378             case EKeyEnter:
       
  4379             case EKeyRightArrow:
       
  4380                 {           
       
  4381                 if(iPosOnScreen < iFileList.Count())
       
  4382                     {
       
  4383                     const TDesC& aSetName = iFileList.operator [](iPosOnScreen)->Des();
       
  4384                 
       
  4385                     ret = iMain->UIStore().LoadTestSet( iFileList.operator [](iPosOnScreen)->Des() );
       
  4386                     if (ret == KErrNone)
       
  4387                         {
       
  4388                         ((CTestSetMenu*)iParent)->SetCreated();
       
  4389                         ((CTestSetMenu*)iParent)->SetTestSetFileName(iFileList.operator [](iPosOnScreen)->Des());
       
  4390                         }
       
  4391                     return iParent;
       
  4392                     }
       
  4393                 else
       
  4394                     {
       
  4395                     return this;
       
  4396                     }
       
  4397                 }
       
  4398             default:
       
  4399                 break;
       
  4400             }
       
  4401             
       
  4402     return CMenu::SelectL( aSelection, aContinue );    
       
  4403 
       
  4404     }
       
  4405 
       
  4406 
       
  4407 
       
  4408 
       
  4409 
       
  4410 
       
  4411 /*
       
  4412 -------------------------------------------------------------------------------
       
  4413 
       
  4414     CTestSetAddCaseMenu
       
  4415 
       
  4416     Method: NewL
       
  4417 
       
  4418     Description: Constructs new menu.
       
  4419 
       
  4420     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4421                 CMenu* aParent            :in:      Parent menu
       
  4422                 const TDesC& aName        :in:      Menu name
       
  4423 
       
  4424     Return Values: CMenu*                           New menu
       
  4425 
       
  4426     Errors/Exceptions: Leaves if memory allocation fails
       
  4427                        Leaves if ConstructL leaves.
       
  4428 
       
  4429     Status: Draft
       
  4430 
       
  4431 -------------------------------------------------------------------------------
       
  4432 */
       
  4433 CTestSetAddCaseMenu* CTestSetAddCaseMenu::NewL( CConsoleMain* aConsole,
       
  4434                                             CMenu* aParent,
       
  4435                                             const TDesC& aName,
       
  4436                                             TDesC& aTestSetName )
       
  4437     {
       
  4438 
       
  4439     CTestSetAddCaseMenu* self = 
       
  4440         new ( ELeave ) CTestSetAddCaseMenu( aTestSetName );
       
  4441     CleanupStack::PushL( self );
       
  4442     self->ConstructL( aConsole, aParent, aName );
       
  4443     CleanupStack::Pop( self );
       
  4444     return self;
       
  4445     
       
  4446     }
       
  4447 
       
  4448 /*
       
  4449 -------------------------------------------------------------------------------
       
  4450 
       
  4451     CTestSetAddCaseMenu
       
  4452 
       
  4453     Method: CTestSetAddCaseMenu
       
  4454 
       
  4455     Description: Constructor
       
  4456 
       
  4457     Parameters: None
       
  4458 
       
  4459     Return Values: None
       
  4460 
       
  4461     Errors/Exceptions: None
       
  4462 
       
  4463     Status: Draft
       
  4464 
       
  4465 -------------------------------------------------------------------------------
       
  4466 */
       
  4467 CTestSetAddCaseMenu::CTestSetAddCaseMenu( TDesC& aTestSetName ):
       
  4468     iTestSetName( aTestSetName )    
       
  4469     {
       
  4470     
       
  4471     iMenuItemsCount = EAddSelected + 1;
       
  4472     iMenuTotCount += iMenuItemsCount;
       
  4473     
       
  4474     }   
       
  4475 
       
  4476 /*
       
  4477 -------------------------------------------------------------------------------
       
  4478 
       
  4479     CTestSetAddCaseMenu
       
  4480 
       
  4481     Method: ~CTestSetAddCaseMenu
       
  4482 
       
  4483     Description: Destructor
       
  4484 
       
  4485     Parameters: None
       
  4486 
       
  4487     Return Values: None
       
  4488 
       
  4489     Errors/Exceptions: None
       
  4490 
       
  4491     Status: Draft
       
  4492 
       
  4493 -------------------------------------------------------------------------------
       
  4494 */
       
  4495 CTestSetAddCaseMenu::~CTestSetAddCaseMenu()
       
  4496     {
       
  4497     }   
       
  4498 
       
  4499 /*
       
  4500 -------------------------------------------------------------------------------
       
  4501 
       
  4502     Class: CTestSetAddCaseMenu
       
  4503 
       
  4504     Method: ConstructL
       
  4505 
       
  4506     Description: Second level constructor.
       
  4507 
       
  4508     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4509                 CMenu* aParent            :in:      Parent menu
       
  4510                 const TDesC& aName        :in:      Menu name
       
  4511 
       
  4512     Return Values: None
       
  4513 
       
  4514     Errors/Exceptions: None
       
  4515 
       
  4516     Status: Draft
       
  4517 
       
  4518 -------------------------------------------------------------------------------
       
  4519 */
       
  4520 void CTestSetAddCaseMenu::ConstructL( CConsoleMain* aConsole,
       
  4521                                CMenu* aParent,
       
  4522                                const TDesC& aName )
       
  4523     {
       
  4524 
       
  4525     CCaseStartMenu::ConstructL( aConsole, aParent, aName );
       
  4526 
       
  4527     }
       
  4528 
       
  4529 
       
  4530 /*
       
  4531 -------------------------------------------------------------------------------
       
  4532 
       
  4533     Class: CTestSetAddCaseMenu
       
  4534 
       
  4535     Method: ItemText
       
  4536 
       
  4537     Description: Returns menu item text
       
  4538 
       
  4539     Parameters: const TInt                :in:      Menu index
       
  4540 
       
  4541     Return Values: const TDesC&                     Menu line text
       
  4542 
       
  4543     Errors/Exceptions: None
       
  4544 
       
  4545     Status: Draft
       
  4546 
       
  4547 -------------------------------------------------------------------------------
       
  4548 */
       
  4549 TInt CTestSetAddCaseMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  4550     {
       
  4551     
       
  4552     if ( iSetFinished )
       
  4553         {
       
  4554         if( aArray.Append( KAddSelected ) != KErrNone )
       
  4555             {
       
  4556             return KErrNoMemory;
       
  4557             }
       
  4558         }
       
  4559     
       
  4560     return CMultipleBaseMenu::ItemTexts( aArray );
       
  4561     
       
  4562     }
       
  4563 
       
  4564 /*
       
  4565 -------------------------------------------------------------------------------
       
  4566 
       
  4567     Class: CTestSetAddCaseMenu
       
  4568 
       
  4569     Method: SelectL
       
  4570 
       
  4571     Description: Process keypresses in menu. Handle enter and right arrow here,
       
  4572     others in CMenu::SelectL.
       
  4573 
       
  4574     Parameters: TKeyCode aSelection       :in:      Key
       
  4575                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  4576 
       
  4577     Return Values: CMenu*                           New menu
       
  4578 
       
  4579     Errors/Exceptions: None
       
  4580 
       
  4581     Status: Draft
       
  4582 
       
  4583 -------------------------------------------------------------------------------
       
  4584 */
       
  4585 CMenu* CTestSetAddCaseMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  4586     {
       
  4587 
       
  4588     MapKeyCode(aSelection);
       
  4589     
       
  4590     if ( iSetFinished )
       
  4591         {
       
  4592         switch ( aSelection )
       
  4593             {
       
  4594             case EKeyEnter:
       
  4595             case EKeyRightArrow:
       
  4596                 {
       
  4597 
       
  4598                 if ( iFirst + iPosOnScreen == EAddSelected )
       
  4599                     {
       
  4600                     TInt count = iTestCases.Count();    
       
  4601                     for( TInt i=0; i<count; i++ )
       
  4602                         {
       
  4603                         if ( iSetState[i] )
       
  4604                             {
       
  4605                             TInt ret = 
       
  4606                                 iMain->UIStore().AddToTestSet( iTestSetName,
       
  4607                                                                iTestCases[i] );
       
  4608                             if( ret != KErrNone )
       
  4609                                 {
       
  4610                                 User::InfoPrint( _L("Test case adding failed") );
       
  4611                                 }   
       
  4612                             }
       
  4613                         } 
       
  4614                     return iParent;
       
  4615                     }               
       
  4616                 }
       
  4617                 break;
       
  4618             default:
       
  4619                 break;
       
  4620             }
       
  4621         }   
       
  4622         
       
  4623     return CMultipleBaseMenu::SelectL( aSelection, aContinue );
       
  4624         
       
  4625     }
       
  4626 
       
  4627 /*
       
  4628 -------------------------------------------------------------------------------
       
  4629 
       
  4630     CTestSetAddCaseMenu
       
  4631 
       
  4632     Method: NewL
       
  4633 
       
  4634     Description: Constructs new menu.
       
  4635 
       
  4636     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4637                 CMenu* aParent            :in:      Parent menu
       
  4638                 const TDesC& aName        :in:      Menu name
       
  4639 
       
  4640     Return Values: CMenu*                           New menu
       
  4641 
       
  4642     Errors/Exceptions: Leaves if memory allocation fails
       
  4643                        Leaves if ConstructL leaves.
       
  4644 
       
  4645     Status: Draft
       
  4646 
       
  4647 -------------------------------------------------------------------------------
       
  4648 */
       
  4649 CTestSetRemoveCaseMenu* CTestSetRemoveCaseMenu::NewL( CConsoleMain* aConsole,
       
  4650                                             CMenu* aParent,
       
  4651                                             const TDesC& aName,
       
  4652                                             TDesC& aTestSetName )
       
  4653     {
       
  4654 
       
  4655     CTestSetRemoveCaseMenu* self = 
       
  4656         new ( ELeave ) CTestSetRemoveCaseMenu( aTestSetName );
       
  4657     CleanupStack::PushL( self );
       
  4658     self->ConstructL( aConsole, aParent, aName );
       
  4659     CleanupStack::Pop( self );
       
  4660     return self;
       
  4661     
       
  4662     }
       
  4663 
       
  4664 /*
       
  4665 -------------------------------------------------------------------------------
       
  4666 
       
  4667     CTestSetRemoveCaseMenu
       
  4668 
       
  4669     Method: CTestSetRemoveCaseMenu
       
  4670 
       
  4671     Description: Constructor
       
  4672 
       
  4673     Parameters: None
       
  4674 
       
  4675     Return Values: None
       
  4676 
       
  4677     Errors/Exceptions: None
       
  4678 
       
  4679     Status: Draft
       
  4680 
       
  4681 -------------------------------------------------------------------------------
       
  4682 */
       
  4683 CTestSetRemoveCaseMenu::CTestSetRemoveCaseMenu( TDesC& aTestSetName ):
       
  4684     iTestSetName( aTestSetName )    
       
  4685     {
       
  4686     
       
  4687     iMenuItemsCount = ERemoveSelected + 1;
       
  4688     iMenuTotCount += iMenuItemsCount;
       
  4689     
       
  4690     }   
       
  4691 
       
  4692 /*
       
  4693 -------------------------------------------------------------------------------
       
  4694 
       
  4695     CTestSetRemoveCaseMenu
       
  4696 
       
  4697     Method: ~CTestSetRemoveCaseMenu
       
  4698 
       
  4699     Description: Destructor
       
  4700 
       
  4701     Parameters: None
       
  4702 
       
  4703     Return Values: None
       
  4704 
       
  4705     Errors/Exceptions: None
       
  4706 
       
  4707     Status: Draft
       
  4708 
       
  4709 -------------------------------------------------------------------------------
       
  4710 */
       
  4711 CTestSetRemoveCaseMenu::~CTestSetRemoveCaseMenu()
       
  4712     {
       
  4713     }   
       
  4714 
       
  4715 /*
       
  4716 -------------------------------------------------------------------------------
       
  4717 
       
  4718     Class: CTestSetRemoveCaseMenu
       
  4719 
       
  4720     Method: ConstructL
       
  4721 
       
  4722     Description: Second level constructor.
       
  4723 
       
  4724     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4725                 CMenu* aParent            :in:      Parent menu
       
  4726                 const TDesC& aName        :in:      Menu name
       
  4727 
       
  4728     Return Values: None
       
  4729 
       
  4730     Errors/Exceptions: None
       
  4731 
       
  4732     Status: Draft
       
  4733 
       
  4734 -------------------------------------------------------------------------------
       
  4735 */
       
  4736 void CTestSetRemoveCaseMenu::ConstructL( CConsoleMain* aConsole,
       
  4737                                CMenu* aParent,
       
  4738                                const TDesC& aName )
       
  4739     {
       
  4740 
       
  4741     CCaseStartMenu::ConstructL( aConsole, aParent, aName );
       
  4742 
       
  4743     }
       
  4744 
       
  4745 
       
  4746 /*
       
  4747 -------------------------------------------------------------------------------
       
  4748 
       
  4749     Class: CTestSetRemoveCaseMenu
       
  4750 
       
  4751     Method: ItemText
       
  4752 
       
  4753     Description: Returns menu item text
       
  4754 
       
  4755     Parameters: const TInt                :in:      Menu index
       
  4756 
       
  4757     Return Values: const TDesC&                     Menu line text
       
  4758 
       
  4759     Errors/Exceptions: None
       
  4760 
       
  4761     Status: Draft
       
  4762 
       
  4763 -------------------------------------------------------------------------------
       
  4764 */
       
  4765 TInt CTestSetRemoveCaseMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  4766     {
       
  4767 
       
  4768     if ( iSetFinished )
       
  4769         {
       
  4770         if( aArray.Append( KRemoveSelected ) != KErrNone )
       
  4771             {
       
  4772             return KErrNoMemory;
       
  4773             }
       
  4774         }
       
  4775     
       
  4776     return CMultipleBaseMenu::ItemTexts( aArray );
       
  4777     
       
  4778     }
       
  4779 
       
  4780 /*
       
  4781 -------------------------------------------------------------------------------
       
  4782 
       
  4783     Class: CTestSetRemoveCaseMenu
       
  4784 
       
  4785     Method: SelectL
       
  4786 
       
  4787     Description: Process keypresses in menu. Handle enter and right arrow here,
       
  4788     others in CMenu::SelectL.
       
  4789 
       
  4790     Parameters: TKeyCode aSelection       :in:      Key
       
  4791                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  4792 
       
  4793     Return Values: CMenu*                           New menu
       
  4794 
       
  4795     Errors/Exceptions: None
       
  4796 
       
  4797     Status: Draft
       
  4798 
       
  4799 -------------------------------------------------------------------------------
       
  4800 */
       
  4801 CMenu* CTestSetRemoveCaseMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  4802     {
       
  4803 
       
  4804     MapKeyCode(aSelection);
       
  4805     
       
  4806     if ( iSetFinished )
       
  4807         {
       
  4808         switch ( aSelection )
       
  4809             {
       
  4810             case EKeyEnter:
       
  4811             case EKeyRightArrow:
       
  4812                 {
       
  4813 
       
  4814                 if ( iFirst + iPosOnScreen == ERemoveSelected )
       
  4815                     {
       
  4816                     TInt count = iTestCases.Count();    
       
  4817                     for( TInt i=0; i<count; i++ )
       
  4818                         {
       
  4819                         if ( iSetState[i] )
       
  4820                             {
       
  4821                             TInt ret = 
       
  4822                                 iMain->UIStore().RemoveFromTestSet( iTestSetName,
       
  4823                                                                     iTestCases[i] );
       
  4824                             if( ret != KErrNone )
       
  4825                                 {
       
  4826                                 User::InfoPrint( _L("Test case adding failed") );
       
  4827                                 }   
       
  4828                             }
       
  4829                         } 
       
  4830                     return iParent;
       
  4831                     }               
       
  4832                 }
       
  4833                 break;
       
  4834             default:
       
  4835                 break;
       
  4836             }
       
  4837         }   
       
  4838         
       
  4839     return CMultipleBaseMenu::SelectL( aSelection, aContinue );
       
  4840         
       
  4841     }
       
  4842 
       
  4843 /*
       
  4844 -------------------------------------------------------------------------------
       
  4845 
       
  4846     Class: CTestSetRemoveCaseMenu
       
  4847 
       
  4848     Method: UpdateTestCases
       
  4849 
       
  4850     Description: 
       
  4851 
       
  4852     Parameters: 
       
  4853 
       
  4854     Return Values: 
       
  4855 
       
  4856     Errors/Exceptions: None
       
  4857 
       
  4858     Status: Draft
       
  4859 
       
  4860 -------------------------------------------------------------------------------
       
  4861 */
       
  4862 TInt CTestSetRemoveCaseMenu::UpdateTestCases()
       
  4863     {
       
  4864     
       
  4865     TRAPD( err,
       
  4866         const CTestSetInfo& set = iMain->UIStore().TestSetL( iTestSetName );                
       
  4867         const RRefArray<const CTestInfo>& testCases = set.TestCases();
       
  4868 
       
  4869         // Update test cases
       
  4870         iTestCases.Reset();
       
  4871         iSetState.Reset();
       
  4872         
       
  4873         TInt count = testCases.Count();
       
  4874         for( TInt i=0; i<count; i++ )
       
  4875             {
       
  4876             err = iTestCases.Append( testCases[i] );
       
  4877             if( err != KErrNone )
       
  4878                 {
       
  4879                 break;
       
  4880                 }
       
  4881             }
       
  4882 
       
  4883         ); // TRAPD
       
  4884                 
       
  4885     return err;
       
  4886                 
       
  4887     }
       
  4888 
       
  4889 /*
       
  4890 -------------------------------------------------------------------------------
       
  4891 
       
  4892     Class: CCaseMenu
       
  4893 
       
  4894     Method: NewL
       
  4895 
       
  4896     Description: Constructs new menu.
       
  4897 
       
  4898     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4899                 CMenu* aParent            :in:      Parent menu
       
  4900                 const TDesC& aName        :in:      Menu name
       
  4901                 TCaseState aType          :in:      Case state
       
  4902 
       
  4903     Return Values: CMenu*                           New menu
       
  4904 
       
  4905     Errors/Exceptions: Leaves if memory allocation fails
       
  4906                        Leaves if ConstructL leaves.
       
  4907 
       
  4908     Status: Draft
       
  4909 
       
  4910 -------------------------------------------------------------------------------
       
  4911 */
       
  4912 CStartedTestSetMenu* CStartedTestSetMenu::NewL( CConsoleMain* aConsole, 
       
  4913                             CMenu* aParent, 
       
  4914                             const TDesC& aName )
       
  4915     {
       
  4916 
       
  4917     CStartedTestSetMenu* self = new ( ELeave ) CStartedTestSetMenu();
       
  4918     CleanupStack::PushL( self );
       
  4919     self->ConstructL( aConsole, aParent, aName );
       
  4920     CleanupStack::Pop( self );
       
  4921     return self;
       
  4922 
       
  4923     }
       
  4924 
       
  4925 /*
       
  4926 -------------------------------------------------------------------------------
       
  4927 
       
  4928     Class: CStartedTestSetMenu
       
  4929 
       
  4930     Method: CStartedTestSetMenu
       
  4931 
       
  4932     Description: Constructor
       
  4933 
       
  4934     Parameters: None
       
  4935 
       
  4936     Return Values: None
       
  4937 
       
  4938     Errors/Exceptions: None
       
  4939 
       
  4940     Status: Draft
       
  4941 
       
  4942 -------------------------------------------------------------------------------
       
  4943 */
       
  4944 CStartedTestSetMenu::CStartedTestSetMenu()
       
  4945     {
       
  4946     iType = CUIStoreIf::ESetAll;
       
  4947     }
       
  4948 
       
  4949 /*
       
  4950 -------------------------------------------------------------------------------
       
  4951 
       
  4952     Class: CStartedTestSetMenu
       
  4953 
       
  4954     Method: ConstructL
       
  4955 
       
  4956     Description: Second level constructor.
       
  4957 
       
  4958     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4959                 CMenu* aParent            :in:      Parent menu
       
  4960                 const TDesC& aName        :in:      Menu name
       
  4961                 TCaseState aType          :in:      Case state
       
  4962 
       
  4963     Return Values: None
       
  4964 
       
  4965     Errors/Exceptions: Leaves if parent class ConstructL leaves
       
  4966                        Leaves if memory allocation fails
       
  4967                        Leaves if CCaseOperation menu NewL leaves
       
  4968                        Leaves if UpcateCaseListL leaves
       
  4969 
       
  4970     Status: Draft
       
  4971 
       
  4972 -------------------------------------------------------------------------------
       
  4973 */
       
  4974 void CStartedTestSetMenu::ConstructL( CConsoleMain* aConsole, 
       
  4975                             CMenu* aParent, 
       
  4976                             const TDesC& aName )
       
  4977     {
       
  4978 
       
  4979     CMenu::ConstructL( aConsole, aParent, aName);
       
  4980 
       
  4981     }
       
  4982 
       
  4983 
       
  4984 
       
  4985 /*
       
  4986 -------------------------------------------------------------------------------
       
  4987 
       
  4988     Class: CStartedTestSetMenu
       
  4989 
       
  4990     Method: ~CStartedTestSetMenu
       
  4991 
       
  4992     Description: Destructor
       
  4993 
       
  4994     Parameters: None
       
  4995 
       
  4996     Return Values: None
       
  4997 
       
  4998     Errors/Exceptions: None
       
  4999 
       
  5000     Status: Draft
       
  5001     
       
  5002 -------------------------------------------------------------------------------
       
  5003 */
       
  5004 CStartedTestSetMenu::~CStartedTestSetMenu()
       
  5005     {
       
  5006 
       
  5007     delete iCaseMenu;
       
  5008     iCaseMenu = 0;
       
  5009     
       
  5010     iTestSets.Reset();
       
  5011     iTestSets.Close();
       
  5012 
       
  5013     }
       
  5014 
       
  5015 
       
  5016 /*
       
  5017 -------------------------------------------------------------------------------
       
  5018 
       
  5019     Class: CStartedTestSetMenu
       
  5020 
       
  5021     Method: ItemText
       
  5022 
       
  5023     Description: Returns menu item text
       
  5024 
       
  5025     Parameters: const TInt                :in:      Menu index
       
  5026 
       
  5027     Return Values: const TDesC&                     Menu line text
       
  5028 
       
  5029     Errors/Exceptions: None
       
  5030 
       
  5031     Status: Draft
       
  5032 
       
  5033 -------------------------------------------------------------------------------
       
  5034 */
       
  5035 TInt CStartedTestSetMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  5036     {
       
  5037     
       
  5038     iTestSets.Reset();
       
  5039     
       
  5040     TInt ret = iMain->UIStore().StartedTestSets( iTestSets, iType );
       
  5041     if ( ret != KErrNone )
       
  5042     	{
       
  5043     	return ret;
       
  5044     	}
       
  5045 
       
  5046     TInt count = iTestSets.Count();
       
  5047     for( TInt i=0; i<count; i++ )
       
  5048         {
       
  5049         if( aArray.Append( iTestSets[i].TestSetInfo().Name() ) != KErrNone )
       
  5050             {
       
  5051             return KErrNoMemory;
       
  5052             }
       
  5053         }
       
  5054 
       
  5055     return KErrNone;
       
  5056     }
       
  5057 
       
  5058 /*
       
  5059 -------------------------------------------------------------------------------
       
  5060     Class: CStartedTestSetMenu
       
  5061 
       
  5062     Method: AppendBefore
       
  5063 
       
  5064     Description: Append text before line.
       
  5065 
       
  5066     Parameters: TInt aLine: in: line number 
       
  5067                 TDes& aLine: in: line text
       
  5068 
       
  5069     Return Values: None
       
  5070 
       
  5071     Errors/Exceptions: None
       
  5072 
       
  5073     Status: Draft
       
  5074     
       
  5075 -------------------------------------------------------------------------------
       
  5076 */
       
  5077 void CStartedTestSetMenu::AppendBefore( TInt aLineNum, TDes& aLine )
       
  5078     {
       
  5079     
       
  5080     CMenu::AppendBefore( aLineNum, aLine );
       
  5081     
       
  5082     if( ( aLine.MaxLength() - aLine.Length() ) < 2 )
       
  5083         {
       
  5084         return;
       
  5085         }        
       
  5086     if( iTestSets[aLineNum].Status() & CUIStoreIf::ESetRunning )
       
  5087         {
       
  5088         aLine.Append( _L("O ") );
       
  5089         }
       
  5090     else if( iTestSets[aLineNum].Status() & CUIStoreIf::ESetPassed )
       
  5091         {
       
  5092         aLine.Append( _L("P ") );
       
  5093         }    
       
  5094     else if( iTestSets[aLineNum].Status() & CUIStoreIf::ESetFailed )
       
  5095         {
       
  5096         aLine.Append( _L("F ") );
       
  5097         }    
       
  5098             
       
  5099     }
       
  5100     
       
  5101 /*
       
  5102 -------------------------------------------------------------------------------
       
  5103 
       
  5104     Class: CStartedTestSetMenu
       
  5105 
       
  5106     Method: SelectL
       
  5107 
       
  5108     Description: Process keypresses in menu. Handle Enter and Right Arrow
       
  5109     here, other will be handled in CMenu::SelectL
       
  5110 
       
  5111     Parameters: TKeyCode aSelection       :in:      Key
       
  5112                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  5113 
       
  5114     Return Values: CMenu*                           New menu
       
  5115 
       
  5116     Errors/Exceptions: None
       
  5117 
       
  5118     Status: Draft
       
  5119 
       
  5120 -------------------------------------------------------------------------------
       
  5121 */
       
  5122 CMenu* CStartedTestSetMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  5123     {
       
  5124 
       
  5125     MapKeyCode(aSelection);
       
  5126     
       
  5127     switch (aSelection)
       
  5128         {
       
  5129         case EKeyEnter:
       
  5130         case EKeyRightArrow:
       
  5131             {
       
  5132             if ( iFirst + iPosOnScreen < iTestSets.Count() )
       
  5133                 {
       
  5134                 delete iCaseMenu;
       
  5135                 iCaseMenu = 0;
       
  5136                 iCaseMenu = CTestSetCaseMenu::NewL( 
       
  5137                     iMain, 
       
  5138                     this, 
       
  5139                     iTestSets[iFirst + iPosOnScreen].TestSetInfo().Name(), 
       
  5140                     iTestSets[iFirst + iPosOnScreen] ); 
       
  5141 
       
  5142                 return iCaseMenu;
       
  5143                 }
       
  5144             }
       
  5145             return this;
       
  5146         default:
       
  5147             break;
       
  5148         }   
       
  5149         
       
  5150     // Let the parent class handle rest
       
  5151     return CMenu::SelectL(aSelection, aContinue);
       
  5152     
       
  5153     }
       
  5154 
       
  5155 
       
  5156 /*
       
  5157 -------------------------------------------------------------------------------
       
  5158 
       
  5159     Class: CTestSetCaseMenu
       
  5160 
       
  5161     Method: NewL
       
  5162 
       
  5163     Description: Constructs new menu.
       
  5164 
       
  5165     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  5166                 CMenu* aParent            :in:      Parent menu
       
  5167                 const TDesC& aName        :in:      Menu name
       
  5168                 TCaseState aType          :in:      Case state
       
  5169 
       
  5170     Return Values: CMenu*                           New menu
       
  5171 
       
  5172     Errors/Exceptions: Leaves if memory allocation fails
       
  5173                        Leaves if ConstructL leaves.
       
  5174 
       
  5175     Status: Draft
       
  5176 
       
  5177 -------------------------------------------------------------------------------
       
  5178 */
       
  5179 CTestSetCaseMenu* CTestSetCaseMenu::NewL( CConsoleMain* aConsole, 
       
  5180                                           CMenu* aParent, 
       
  5181                                           const TDesC& aName,
       
  5182                                           CStartedTestSet& aTestSet  )
       
  5183     {
       
  5184 
       
  5185     CTestSetCaseMenu* self = new ( ELeave ) CTestSetCaseMenu( aTestSet );
       
  5186     CleanupStack::PushL( self );
       
  5187     self->ConstructL( aConsole, aParent, aName );
       
  5188     CleanupStack::Pop( self );
       
  5189     return self;
       
  5190 
       
  5191     }
       
  5192 
       
  5193 /*
       
  5194 -------------------------------------------------------------------------------
       
  5195 
       
  5196     Class: CTestSetCaseMenu
       
  5197 
       
  5198     Method: CTestSetCaseMenu
       
  5199 
       
  5200     Description: Constructor
       
  5201 
       
  5202     Parameters: None
       
  5203 
       
  5204     Return Values: None
       
  5205 
       
  5206     Errors/Exceptions: None
       
  5207 
       
  5208     Status: Draft
       
  5209 
       
  5210 -------------------------------------------------------------------------------
       
  5211 */
       
  5212 CTestSetCaseMenu::CTestSetCaseMenu( CStartedTestSet& aTestSet ):
       
  5213     iTestSet( aTestSet )
       
  5214     {
       
  5215     }
       
  5216     
       
  5217 /*
       
  5218 -------------------------------------------------------------------------------
       
  5219 
       
  5220     Class: CTestSetCaseMenu
       
  5221 
       
  5222     Method: ConstructL
       
  5223 
       
  5224     Description: Second level constructor.
       
  5225 
       
  5226     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  5227                 CMenu* aParent            :in:      Parent menu
       
  5228                 const TDesC& aName        :in:      Menu name
       
  5229                 TCaseState aType          :in:      Case state
       
  5230 
       
  5231     Return Values: None
       
  5232 
       
  5233     Errors/Exceptions: Leaves if parent class ConstructL leaves
       
  5234                        Leaves if memory allocation fails
       
  5235                        Leaves if CCaseOperation menu NewL leaves
       
  5236                        Leaves if UpcateCaseListL leaves
       
  5237 
       
  5238     Status: Draft
       
  5239 
       
  5240 -------------------------------------------------------------------------------
       
  5241 */
       
  5242 void CTestSetCaseMenu::ConstructL( CConsoleMain* aConsole, 
       
  5243                             CMenu* aParent, 
       
  5244                             const TDesC& aName )
       
  5245     {
       
  5246 
       
  5247     CCaseMenu::ConstructL( aConsole, aParent, aName, 
       
  5248                            CUIStoreIf::EStatusAll );
       
  5249 
       
  5250     }
       
  5251 
       
  5252 
       
  5253 
       
  5254 /*
       
  5255 -------------------------------------------------------------------------------
       
  5256 
       
  5257     Class: CTestSetCaseMenu
       
  5258 
       
  5259     Method: ~CTestSetCaseMenu
       
  5260 
       
  5261     Description: Destructor
       
  5262 
       
  5263     Parameters: None
       
  5264 
       
  5265     Return Values: None
       
  5266 
       
  5267     Errors/Exceptions: None
       
  5268 
       
  5269     Status: Draft
       
  5270     
       
  5271 -------------------------------------------------------------------------------
       
  5272 */
       
  5273 CTestSetCaseMenu::~CTestSetCaseMenu()
       
  5274     {
       
  5275     }
       
  5276 
       
  5277 
       
  5278 /*
       
  5279 -------------------------------------------------------------------------------
       
  5280 
       
  5281     Class: CTestSetCaseMenu
       
  5282 
       
  5283     Method: ItemText
       
  5284 
       
  5285     Description: Returns menu item text
       
  5286 
       
  5287     Parameters: const TInt                :in:      Menu index
       
  5288 
       
  5289     Return Values: const TDesC&                     Menu line text
       
  5290 
       
  5291     Errors/Exceptions: None
       
  5292 
       
  5293     Status: Draft
       
  5294 
       
  5295 -------------------------------------------------------------------------------
       
  5296 */
       
  5297 TInt CTestSetCaseMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  5298     {
       
  5299     
       
  5300     if ( iTestSet.Status() & CUIStoreIf::ESetRunning )
       
  5301         {
       
  5302         if( aArray.Append( KCancelTestSet ) != KErrNone )
       
  5303             {
       
  5304             return KErrNoMemory;
       
  5305             }
       
  5306         }
       
  5307     
       
  5308     const RRefArray<CStartedTestCase>& testCases = iTestSet.TestCases();
       
  5309         
       
  5310     iTestCases.Reset();
       
  5311     
       
  5312     TInt count = testCases.Count();
       
  5313     for( TInt i=0; i<count; i++ )
       
  5314         {
       
  5315         if( iTestCases.Append( testCases[i] ) != KErrNone )
       
  5316             {
       
  5317             return KErrNoMemory;
       
  5318             }  
       
  5319         if( aArray.Append( testCases[i].TestInfo().TestCaseTitle() ) != KErrNone )
       
  5320             {
       
  5321             return KErrNoMemory;
       
  5322             }   
       
  5323         }
       
  5324 
       
  5325     return KErrNone;
       
  5326     
       
  5327     }
       
  5328 
       
  5329 /*
       
  5330 -------------------------------------------------------------------------------
       
  5331     Class: CTestSetCaseMenu
       
  5332 
       
  5333     Method: AppendBefore
       
  5334 
       
  5335     Description: Append text before line.
       
  5336 
       
  5337     Parameters: TInt aLine: in: line number 
       
  5338                 TDes& aLine: in: line text
       
  5339 
       
  5340     Return Values: None
       
  5341 
       
  5342     Errors/Exceptions: None
       
  5343 
       
  5344     Status: Draft
       
  5345     
       
  5346 -------------------------------------------------------------------------------
       
  5347 */
       
  5348 void CTestSetCaseMenu::AppendBefore( TInt aLineNum, TDes& aLine )
       
  5349     {
       
  5350     
       
  5351     CMenu::AppendBefore( aLineNum, aLine );
       
  5352    
       
  5353     TInt testCaseNum = aLineNum; 
       
  5354     if( iTestSet.Status() & CUIStoreIf::ESetRunning ) 
       
  5355         {
       
  5356         if( aLineNum == 0 )
       
  5357             {
       
  5358             // "Cancel test set" row
       
  5359             return;
       
  5360             }
       
  5361         testCaseNum--;
       
  5362         }
       
  5363         
       
  5364     if( ( aLine.MaxLength() - aLine.Length() ) < 2 )
       
  5365         {
       
  5366         return;
       
  5367         }        
       
  5368     
       
  5369    if( iTestCases[testCaseNum].Status() & CUIStoreIf::EStatusRunning )
       
  5370         {
       
  5371         aLine.Append( _L("O ") );
       
  5372         }
       
  5373     else if( iTestCases[testCaseNum].Status() & CUIStoreIf::EStatusPassed )
       
  5374         {
       
  5375         aLine.Append( _L("P ") );
       
  5376         }
       
  5377     else if( iTestCases[testCaseNum].Status() & CUIStoreIf::EStatusFailed )
       
  5378         {
       
  5379         aLine.Append( _L("F ") );
       
  5380         }
       
  5381     else if( iTestCases[testCaseNum].Status() & CUIStoreIf::EStatusAborted )
       
  5382         {
       
  5383         aLine.Append( _L("A ") );
       
  5384         }
       
  5385     else if( iTestCases[testCaseNum].Status() & CUIStoreIf::EStatusCrashed )
       
  5386         {
       
  5387         aLine.Append( _L("C ") );
       
  5388         }
       
  5389 
       
  5390     }
       
  5391 
       
  5392 /*
       
  5393 -------------------------------------------------------------------------------
       
  5394 
       
  5395     Class: CTestSetCaseMenu
       
  5396 
       
  5397     Method: SelectL
       
  5398 
       
  5399     Description: Process keypresses in menu. Handle enter and right arrow here,
       
  5400     others in CMenu::SelectL.
       
  5401 
       
  5402     Parameters: TKeyCode aSelection       :in:      Key
       
  5403                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  5404 
       
  5405     Return Values: CMenu*                           New menu
       
  5406 
       
  5407     Errors/Exceptions: None
       
  5408 
       
  5409     Status: Draft
       
  5410 
       
  5411 -------------------------------------------------------------------------------
       
  5412 */
       
  5413 CMenu* CTestSetCaseMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  5414     {
       
  5415     
       
  5416     MapKeyCode(aSelection);
       
  5417 
       
  5418     if( ( aSelection == EKeyEnter ) || ( aSelection == EKeyRightArrow ) )
       
  5419         {
       
  5420         TInt pos = iFirst + iPosOnScreen; 
       
  5421         if( iTestSet.Status() & CUIStoreIf::ESetRunning )
       
  5422             {
       
  5423             pos--;
       
  5424             }               
       
  5425         if( pos == -1 )
       
  5426             {
       
  5427             User::LeaveIfError( 
       
  5428                 iMain->UIStore().AbortTestSet( iTestSet ) );
       
  5429             return iParent;             
       
  5430             }
       
  5431         else if( pos < iTestCases.Count() )
       
  5432             {
       
  5433             delete iCaseOperationMenu;
       
  5434             iCaseOperationMenu = 0;
       
  5435             iCaseOperationMenu = CCaseOperationMenu::NewL( 
       
  5436                 iMain, 
       
  5437                 this, 
       
  5438                 iTestCases[pos].TestInfo().TestCaseTitle(), 
       
  5439                 &iTestCases[pos] ); 
       
  5440 
       
  5441             return iCaseOperationMenu;
       
  5442             }
       
  5443         }
       
  5444 
       
  5445         // Let the parent class handle rest
       
  5446     return CMenu::SelectL(aSelection, aContinue);
       
  5447     }
       
  5448         
       
  5449 /*
       
  5450 -------------------------------------------------------------------------------
       
  5451 
       
  5452     Class: CFilterMenu
       
  5453 
       
  5454     Method: NewL
       
  5455 
       
  5456     Description: Constructs new menu.
       
  5457 
       
  5458     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  5459                 CMenu* aParent            :in:      Parent menu
       
  5460                 const TDesC& aName        :in:      Menu name
       
  5461 
       
  5462     Return Values: CMenu*                           New menu
       
  5463 
       
  5464     Errors/Exceptions: Leaves if memory allocation fails
       
  5465                        Leaves if ConstructL leaves.
       
  5466 
       
  5467     Status: Draft
       
  5468 
       
  5469 -------------------------------------------------------------------------------
       
  5470 */
       
  5471 CFilterMenu* CFilterMenu::NewL(CConsoleMain* aConsole,
       
  5472                                CMenu* aParent,
       
  5473                                const TDesC& aName)
       
  5474     {
       
  5475     CFilterMenu* self = new (ELeave) CFilterMenu();
       
  5476     CleanupStack::PushL(self);
       
  5477     self->ConstructL(aConsole, aParent, aName);
       
  5478     CleanupStack::Pop(self);
       
  5479     return self;
       
  5480     }
       
  5481 
       
  5482 /*
       
  5483 -------------------------------------------------------------------------------
       
  5484 
       
  5485     Class: CFilterMenu
       
  5486 
       
  5487     Method: ConstructL
       
  5488 
       
  5489     Description: Second level constructor.
       
  5490 
       
  5491     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  5492                 CMenu* aParent            :in:      Parent menu
       
  5493                 const TDesC& aName        :in:      Menu name
       
  5494 
       
  5495     Return Values: None
       
  5496 
       
  5497     Errors/Exceptions: None
       
  5498 
       
  5499     Status: Draft
       
  5500 
       
  5501 -------------------------------------------------------------------------------
       
  5502 */
       
  5503 void CFilterMenu::ConstructL(CConsoleMain* aConsole,
       
  5504                              CMenu* aParent,
       
  5505                              const TDesC& aName
       
  5506                             )
       
  5507     {
       
  5508     CMenu::ConstructL(aConsole, aParent, aName);
       
  5509     }
       
  5510 
       
  5511 /*
       
  5512 -------------------------------------------------------------------------------
       
  5513 
       
  5514     CFilterMenu
       
  5515 
       
  5516     Method: CFilterMenu
       
  5517 
       
  5518     Description: Constructor
       
  5519 
       
  5520     Parameters: None
       
  5521 
       
  5522     Return Values: None
       
  5523 
       
  5524     Errors/Exceptions: None
       
  5525 
       
  5526     Status: Draft
       
  5527 
       
  5528 -------------------------------------------------------------------------------
       
  5529 */
       
  5530 CFilterMenu::CFilterMenu()
       
  5531     {
       
  5532     }
       
  5533     
       
  5534 /*
       
  5535 -------------------------------------------------------------------------------
       
  5536 
       
  5537     CFilterMenu
       
  5538 
       
  5539     Method: ~CFilterMenu
       
  5540 
       
  5541     Description: Destructor
       
  5542 
       
  5543     Parameters: None
       
  5544 
       
  5545     Return Values: None
       
  5546 
       
  5547     Errors/Exceptions: None
       
  5548 
       
  5549     Status: Draft
       
  5550 
       
  5551 -------------------------------------------------------------------------------
       
  5552 */
       
  5553 CFilterMenu::~CFilterMenu()
       
  5554     {
       
  5555     delete iTestCaseMenu;
       
  5556     }
       
  5557     
       
  5558 /*
       
  5559 -------------------------------------------------------------------------------
       
  5560 
       
  5561     Class: CFilterMenu
       
  5562 
       
  5563     Method: ItemText
       
  5564 
       
  5565     Description: Returns menu item text
       
  5566 
       
  5567     Parameters: const TInt                :in:      Menu index
       
  5568 
       
  5569     Return Values: const TDesC&                     Menu line text
       
  5570 
       
  5571     Errors/Exceptions: None
       
  5572 
       
  5573     Status: Draft
       
  5574 
       
  5575 -------------------------------------------------------------------------------
       
  5576 */
       
  5577 TInt CFilterMenu::ItemTexts(RRefArray<TDesC>& aArray)
       
  5578     {
       
  5579     const RPointerArray<TDesC> &filters = iMain->GetFilterArray();
       
  5580     TInt ret;
       
  5581     
       
  5582     TInt count = filters.Count();
       
  5583     for(TInt i = 0; i < count; i++)
       
  5584         {    
       
  5585         ret = aArray.Append(*filters[i]);
       
  5586         if(ret != KErrNone)
       
  5587             {
       
  5588             return ret;
       
  5589             }
       
  5590         }
       
  5591         
       
  5592     return KErrNone;
       
  5593     }
       
  5594 
       
  5595 /*
       
  5596 -------------------------------------------------------------------------------
       
  5597 
       
  5598     Class: CFilterMenu
       
  5599 
       
  5600     Method: SelectL
       
  5601 
       
  5602     Description: Process keypresses in menu. Handle enter and right arrow here,
       
  5603     others in CMenu::SelectL.
       
  5604 
       
  5605     Parameters: TKeyCode aSelection       :in:      Key
       
  5606                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  5607 
       
  5608     Return Values: CMenu*                           New menu
       
  5609 
       
  5610     Errors/Exceptions: None
       
  5611 
       
  5612     Status: Draft
       
  5613 
       
  5614 -------------------------------------------------------------------------------
       
  5615 */
       
  5616 CMenu* CFilterMenu::SelectL(TKeyCode aSelection, TBool& aContinue)
       
  5617     {
       
  5618     const RPointerArray<TDesC> &filters = iMain->GetFilterArray();
       
  5619     
       
  5620     MapKeyCode(aSelection);
       
  5621     
       
  5622     switch ( aSelection )
       
  5623         {
       
  5624         case EKeyEnter:
       
  5625         case EKeyRightArrow:
       
  5626             {
       
  5627             // Start the case
       
  5628             if((iFirst + iPosOnScreen) < filters.Count())
       
  5629                 {
       
  5630                 // Show test cases menu
       
  5631                 iMain->SetFilterIndex(iFirst + iPosOnScreen);
       
  5632                 if(iTestCaseMenu)
       
  5633                     {
       
  5634                     return iTestCaseMenu;
       
  5635                     }
       
  5636                 else
       
  5637                     {
       
  5638                     RDebug::Print(_L("STIF: CFilterMenu::SelectL: test case menu is not set, however it should be"));
       
  5639                     return this;
       
  5640                     }
       
  5641                 }
       
  5642             else
       
  5643                 {
       
  5644                 return this;
       
  5645                 }
       
  5646             }
       
  5647 
       
  5648         default:
       
  5649             return CMenu::SelectL( aSelection, aContinue);
       
  5650         }
       
  5651     }
       
  5652     
       
  5653 /*
       
  5654 -------------------------------------------------------------------------------
       
  5655 
       
  5656     Class: CFilterMenu
       
  5657 
       
  5658     Method: SetTestCaseMenu
       
  5659 
       
  5660     Description: Set pointer to test case menu, so it can be shown when user
       
  5661                  selects filter.
       
  5662                  This menu will be deleted along with the filter menu.
       
  5663 
       
  5664     Parameters: CMenu* aTestCaseMenu      :in:      test case menu
       
  5665 
       
  5666     Return Values: None
       
  5667 
       
  5668     Errors/Exceptions: None
       
  5669 
       
  5670     Status: Draft
       
  5671 
       
  5672 -------------------------------------------------------------------------------
       
  5673 */
       
  5674 void CFilterMenu::SetTestCaseMenu(CMenu* aTestCaseMenu)
       
  5675     {
       
  5676     if(iTestCaseMenu)
       
  5677         {
       
  5678         RDebug::Print(_L("STIF: CFilterMenu::SetTestCaseMenu: test case menu is already set!"));
       
  5679         delete iTestCaseMenu;
       
  5680         iTestCaseMenu = NULL;
       
  5681         }
       
  5682     iTestCaseMenu = aTestCaseMenu;
       
  5683     }
       
  5684 // End of file