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