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