testexecfw/stf/stfui/consoleui/src/Consolemenus.cpp
changeset 2 8bb370ba6d1d
equal deleted inserted replaced
1:bbd31066657e 2:8bb370ba6d1d
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 * 
       
    14 * Description: This module contains implementation of 
       
    15 * CMenu-derived classes.
       
    16 *
       
    17 */
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include <e32base.h>
       
    21 #include <e32cons.h>
       
    22 #include <e32svr.h>
       
    23 
       
    24 #include <f32file.h>
       
    25 #include <stifinternal/UIEngineContainer.h>
       
    26 
       
    27 #include "ConsoleUI.h"
       
    28 #include "ConsoleMenus.h"
       
    29 
       
    30 // EXTERNAL DATA STRUCTURES
       
    31 
       
    32 // EXTERNAL FUNCTION PROTOTYPES  
       
    33 
       
    34 // CONSTANTS
       
    35 
       
    36 // MACROS
       
    37 
       
    38 // LOCAL CONSTANTS AND MACROS
       
    39 
       
    40 // MODULE DATA STRUCTURES
       
    41 
       
    42 // LOCAL FUNCTION PROTOTYPES
       
    43 LOCAL_C void LimitedAppend( TDes& aOriginal, const TDesC& aAppend);
       
    44 
       
    45 // FORWARD DECLARATIONS
       
    46 
       
    47 // ==================== LOCAL FUNCTIONS =======================================
       
    48 
       
    49 LOCAL_C void LimitedAppend( TDes& aOriginal, const TDesC& aAppend)
       
    50     {
       
    51 
       
    52     TInt spaceLeft = aOriginal.MaxLength() - aOriginal.Length();
       
    53     
       
    54     if (spaceLeft > aAppend.Length())
       
    55         {
       
    56         aOriginal.Append ( aAppend );
       
    57         }
       
    58     else
       
    59         {       
       
    60         aOriginal.Append ( aAppend.Left ( spaceLeft ) );
       
    61         }
       
    62 
       
    63     }
       
    64 
       
    65 // None
       
    66 
       
    67 // ================= MEMBER FUNCTIONS =========================================
       
    68 
       
    69 
       
    70 /*
       
    71 -------------------------------------------------------------------------------
       
    72 
       
    73     Class: CMenu
       
    74 
       
    75     Method: NewL
       
    76 
       
    77     Description: Constructs new menu.
       
    78 
       
    79     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
    80                 CMenu* aParent            :in:      Parent menu
       
    81                 const TDesC& aName        :in:      Menu name
       
    82 
       
    83     Return Values: CMenu*                           New menu
       
    84 
       
    85     Errors/Exceptions: Leaves if memory allocation fails
       
    86                        Leaves if ConstructL leaves.
       
    87 
       
    88     Status: Draft
       
    89 
       
    90 -------------------------------------------------------------------------------
       
    91 */
       
    92 CMenu* CMenu::NewL( CConsoleMain* aConsole,
       
    93                     CMenu* aParent,
       
    94                     const TDesC& aName
       
    95                   )
       
    96     {
       
    97 
       
    98     CMenu* self = new ( ELeave ) CMenu();
       
    99     CleanupStack::PushL( self );
       
   100     self->ConstructL( aConsole, aParent, aName );
       
   101     CleanupStack::Pop( self );
       
   102     return self;
       
   103 
       
   104     }
       
   105 
       
   106 /*
       
   107 -------------------------------------------------------------------------------
       
   108 
       
   109     Class: CMenu
       
   110 
       
   111     Method: ConstructL
       
   112 
       
   113     Description: Second level constructor.
       
   114 
       
   115     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
   116                 CMenu* aParent            :in:      Parent menu
       
   117                 const TDesC& aName        :in:      Menu name
       
   118 				const TDesC& aHeader	  :in:		Text containing STIF version info
       
   119 				
       
   120     Return Values: None
       
   121 
       
   122     Errors/Exceptions: None
       
   123 
       
   124     Status: Draft
       
   125 
       
   126 -------------------------------------------------------------------------------
       
   127 */
       
   128 void CMenu::ConstructL( CConsoleMain* aConsole,
       
   129                         CMenu* aParent,
       
   130                         const TDesC& aName,
       
   131                         const TDesC& aHeader
       
   132                       )
       
   133     {
       
   134  
       
   135     // Store the parameters
       
   136     iMain = aConsole;
       
   137     iConsole = aConsole->GetConsole();
       
   138     iParent = aParent;
       
   139     iName = aName;
       
   140     iHeader = aHeader;
       
   141 
       
   142     // Get display size
       
   143     const TInt KOverHead = 5;
       
   144     iSize = iConsole->ScreenSize();
       
   145     iScreenSize = iSize.iHeight - KOverHead;   // Size available for menus
       
   146 
       
   147     }
       
   148 
       
   149 /*
       
   150 -------------------------------------------------------------------------------
       
   151 
       
   152     Class: CMenu
       
   153 
       
   154     Method: CMenu
       
   155 
       
   156     Description: Constructor
       
   157 
       
   158     Parameters: None
       
   159 
       
   160     Return Values: None
       
   161 
       
   162     Errors/Exceptions: None
       
   163 
       
   164     Status: Draft
       
   165 
       
   166 -------------------------------------------------------------------------------
       
   167 */
       
   168 CMenu::CMenu()
       
   169     {
       
   170     iDirection = 1;
       
   171     iPrevPos  = -1;     // Invalid starting value
       
   172     }
       
   173 
       
   174 /*
       
   175 -------------------------------------------------------------------------------
       
   176 
       
   177     Class: CMenu
       
   178 
       
   179     Method: ~CMenu
       
   180 
       
   181     Description: Destructor
       
   182 
       
   183     Parameters: None
       
   184 
       
   185     Return Values: None
       
   186 
       
   187     Errors/Exceptions: None
       
   188 
       
   189     Status: Draft
       
   190     
       
   191 -------------------------------------------------------------------------------
       
   192 */
       
   193 CMenu::~CMenu()
       
   194     {
       
   195     
       
   196     iItems.ResetAndDestroy();
       
   197     
       
   198     }
       
   199 
       
   200 /*
       
   201 -------------------------------------------------------------------------------
       
   202 
       
   203     Class: CMenu
       
   204 
       
   205     Method: TimerUpdate
       
   206 
       
   207     Description: TimerUpdate
       
   208 
       
   209     Parameters: None
       
   210 
       
   211     Return Values: None
       
   212 
       
   213     Errors/Exceptions: None
       
   214 
       
   215     Status: Draft
       
   216     
       
   217 -------------------------------------------------------------------------------
       
   218 */
       
   219 void CMenu::TimerUpdate()
       
   220     {    
       
   221     iScrolledLine.Zero();
       
   222     RRefArray<TDesC> texts;
       
   223     User::LeaveIfError( ItemTexts( texts ) );
       
   224     
       
   225     TInt count = texts.Count();
       
   226     // If list is empty, do not scroll.
       
   227     if ( count < 1 )
       
   228         {
       
   229         texts.Close();
       
   230         return;
       
   231         }
       
   232     
       
   233     // Recalculate visible part of menu
       
   234     Recalculate( count );
       
   235 
       
   236     // If menu selection is updated, then restart scrolling
       
   237     if (iPrevPos != iFirst + iPosOnScreen)
       
   238         {
       
   239         iPrevPos = iFirst + iPosOnScreen;
       
   240         iStart = 0;
       
   241         iDirection = 1;
       
   242         }
       
   243 
       
   244 
       
   245     // If menu item have not been changed after last timer, then
       
   246     // start scrolling  
       
   247     const TDesC& name = texts[ iFirst + iPosOnScreen ];
       
   248     if ( name.Length() > ( iSize.iWidth - KMenuOverhead ) )
       
   249         {
       
   250 
       
   251         TInt y = iConsole->WhereY();
       
   252         TInt x = iConsole->WhereX();
       
   253         TBuf<80> iTmp;              
       
   254 
       
   255         iStart = iStart + iDirection;
       
   256 
       
   257         // "Right end"
       
   258         if ( iStart + iSize.iWidth > name.Length() + KMenuOverhead + 2)
       
   259             {
       
   260             iStart--;
       
   261             iDirection = -1;
       
   262             }
       
   263         
       
   264         // "Left end"
       
   265         if ( iStart == -1 )
       
   266             {
       
   267             iStart++;
       
   268             iDirection = 1;
       
   269             }
       
   270         
       
   271         if( iStart > name.Length() )
       
   272             {
       
   273             iStart = 0;
       
   274             }
       
   275 
       
   276         iTmp=_L(" *");
       
   277         LimitedAppend( iTmp, name.Mid ( iStart ) );
       
   278             
       
   279         iConsole->SetPos( 0, iPosOnScreen+1);       
       
   280         Print(iTmp);
       
   281         iScrolledLine.Copy(texts[iFirst + iPosOnScreen].Left(iScrolledLine.MaxLength())); 
       
   282 
       
   283         iConsole->SetPos(x,y);
       
   284         }
       
   285     texts.Close();
       
   286 
       
   287     }
       
   288     
       
   289 
       
   290 /*
       
   291 -------------------------------------------------------------------------------
       
   292     Class: CMenu
       
   293 
       
   294     Method: AppendBefore
       
   295 
       
   296     Description: Append text before line.
       
   297 
       
   298     Parameters: TInt aLine: in: line number 
       
   299                 TDes& aLine: in: line text
       
   300 
       
   301     Return Values: None
       
   302 
       
   303     Errors/Exceptions: None
       
   304 
       
   305     Status: Draft
       
   306     
       
   307 -------------------------------------------------------------------------------
       
   308 */
       
   309 void CMenu::AppendBefore( TInt aLineNum, TDes& aLine )
       
   310     {
       
   311     
       
   312     if( ( aLine.MaxLength() - aLine.Length() ) < 2 )
       
   313         {
       
   314         return;
       
   315         }        
       
   316     
       
   317     // If printing active line, print the marker
       
   318     if ( aLineNum == iPosOnScreen + iFirst )
       
   319         {
       
   320         aLine.Append( _L(" *") );
       
   321         }
       
   322     else
       
   323         {
       
   324         aLine.Append( _L("  ") );
       
   325         }
       
   326         
       
   327     }
       
   328 
       
   329 /*
       
   330 -------------------------------------------------------------------------------
       
   331     Class: CMenu
       
   332 
       
   333     Method: PrintMenuL
       
   334 
       
   335     Description: Prints the menu
       
   336 
       
   337     Parameters: None
       
   338 
       
   339     Return Values: None
       
   340 
       
   341     Errors/Exceptions: None
       
   342 
       
   343     Status: Draft
       
   344     
       
   345 -------------------------------------------------------------------------------
       
   346 */
       
   347 void CMenu::PrintMenuL( TUpdateType aType )
       
   348     {
       
   349 
       
   350     iUpdateType = aType;
       
   351     
       
   352     TBuf<KMaxLineLength> line;
       
   353     
       
   354     //if we are moving between items located on the same page clearing screen is not needed
       
   355     if(!iPreventClearScreen)
       
   356         {
       
   357         // Clear display
       
   358         iConsole->ClearScreen();
       
   359         
       
   360         //Print STIF version information, only when defined (i.e. in main menu)
       
   361         if(iHeader != _L(""))
       
   362            Print(iHeader);
       
   363         
       
   364         // Print menu title
       
   365         Print( Name() );
       
   366         
       
   367         RRefArray<TDesC> texts;
       
   368         User::LeaveIfError( ItemTexts( texts ) );
       
   369         
       
   370         // Recalculate visible part of menu
       
   371         Recalculate( texts.Count() );
       
   372         
       
   373         //needed for setting cursor at correct line 
       
   374         iMenuItemsListStartIndex = iConsole->CursorPos().iY;
       
   375         
       
   376         // Print items
       
   377         for ( TInt i = iFirst; i <= iLast; i++ )
       
   378             {
       
   379             line.Zero();
       
   380             
       
   381             // Append text before line
       
   382             AppendBefore( i, line );
       
   383         
       
   384             // Get the menu line
       
   385             LimitedAppend ( line, texts[i] );
       
   386         
       
   387             // Print the line
       
   388             Print(line);
       
   389             }
       
   390         texts.Close();
       
   391         
       
   392         //needed for setting cursor at correct line 
       
   393         iMenuItemsListEndIndex = iConsole->CursorPos().iY;
       
   394         }
       
   395     else
       
   396         {
       
   397         //removing "*" sign from the previous cursor position
       
   398         iConsole->SetPos(0, iPrevPosOnScreen + iMenuItemsListStartIndex);
       
   399         //line.Append( _L("  ") );
       
   400         AppendBefore(iPrevPosOnScreen + iFirst, line);
       
   401         LimitedAppend(line, iScrolledLine);
       
   402         //iConsole->Printf(line);
       
   403         Print(line);
       
   404         iConsole->SetPos(0, iPosOnScreen + iMenuItemsListStartIndex);
       
   405         line.Zero();
       
   406         iScrolledLine.Zero();
       
   407         
       
   408         //writing "*" sign before the currently selected line
       
   409         line.Append( _L(" *") );
       
   410         iConsole->Printf(line);
       
   411         iConsole->SetPos(0, iMenuItemsListEndIndex);
       
   412         iPreventClearScreen = EFalse;
       
   413         }
       
   414     }
       
   415 
       
   416 /*
       
   417 -------------------------------------------------------------------------------
       
   418 
       
   419     Class: CMenu
       
   420 
       
   421     Method: SelectL
       
   422 
       
   423     Description: Common method to count all variables needed for printing
       
   424                  page of the screen.
       
   425 
       
   426     Parameters: TInt aDelta       :in:      where to move current position
       
   427                  Value > 0 stands for moving down the menu.
       
   428                  Value < 0 stands for moving up the menu.
       
   429 
       
   430     Return Values: 
       
   431 
       
   432     Errors/Exceptions: None
       
   433 
       
   434     Status: Draft
       
   435 
       
   436 -------------------------------------------------------------------------------
       
   437 */
       
   438 void CMenu::MovePosition(TInt aDelta)
       
   439     {
       
   440     if(iItemCount > 0 && aDelta != 0)
       
   441         {
       
   442         // Valid screen size
       
   443         TInt screenSize = iScreenSize + 1;
       
   444         TInt realPosition = iFirst + iPosOnScreen;
       
   445 
       
   446         // Number of all pages and items in the last page
       
   447         TInt rest = iItemCount % screenSize;
       
   448         TInt pages = (iItemCount / screenSize) + ((rest == 0) ? (0) : (1));
       
   449 
       
   450         // Current page
       
   451         TInt currPage = realPosition / screenSize;
       
   452         
       
   453         // New page
       
   454         TInt newRealPosition = realPosition + aDelta;
       
   455         while(newRealPosition < 0)
       
   456             newRealPosition += iItemCount;
       
   457         newRealPosition %= iItemCount;
       
   458         TInt newPage = newRealPosition / screenSize;
       
   459         
       
   460         // Change position
       
   461         iFirst = newPage * screenSize;
       
   462         iLast = iFirst + screenSize - 1;
       
   463         if(iLast >= iItemCount)
       
   464             iLast = iItemCount - 1;
       
   465         iPrevPosOnScreen = iPosOnScreen;
       
   466         iPosOnScreen = newRealPosition % screenSize;
       
   467         if(newPage == pages - 1 && iPosOnScreen >= rest)
       
   468             iPosOnScreen = rest - 1;
       
   469             
       
   470         // Prevent refreshing
       
   471         iPreventClearScreen = (currPage == newPage);
       
   472         }
       
   473     else
       
   474         iPreventClearScreen = ETrue;    
       
   475     }
       
   476     
       
   477 /*
       
   478 -------------------------------------------------------------------------------
       
   479 
       
   480     Class: CMenu
       
   481 
       
   482     Method: SelectL
       
   483 
       
   484     Description: Process keypresses in menu. Either updates position in
       
   485     menu or returns new menu.
       
   486 
       
   487     Parameters: TKeyCode aSelection       :in:      Key
       
   488                 TBool& aContinue          :out:     Has user pressed "Quit"
       
   489 
       
   490     Return Values: CMenu*                           New menu
       
   491 
       
   492     Errors/Exceptions: None
       
   493 
       
   494     Status: Draft
       
   495 
       
   496 -------------------------------------------------------------------------------
       
   497 */
       
   498 CMenu* CMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
   499     {
       
   500 
       
   501     MapKeyCode(aSelection);
       
   502     
       
   503     switch ( (TInt) aSelection )
       
   504     {
       
   505 
       
   506     // Exit
       
   507     case EKeyEscape:
       
   508         aContinue = EFalse;
       
   509         return this;
       
   510 
       
   511     // SelectL item
       
   512     case EKeyEnter:
       
   513     case EKeyRightArrow:
       
   514         return iItems[iPosOnScreen];
       
   515 
       
   516     // Going back
       
   517     case EKeyLeftArrow:
       
   518         return iParent;
       
   519 
       
   520     // Go down
       
   521     case EKeyDownArrow:
       
   522         MovePosition(1);
       
   523         break;
       
   524         
       
   525     // Go Up
       
   526     case EKeyUpArrow:
       
   527         MovePosition(-1);
       
   528         break;
       
   529 
       
   530     // Additional keys
       
   531     case EKeyHome:
       
   532     case '3':
       
   533         MovePosition(-iFirst - iPosOnScreen);
       
   534         break;
       
   535 
       
   536     case EKeyEnd:
       
   537     case '9':
       
   538         MovePosition(iItemCount - 1 - iFirst - iPosOnScreen);
       
   539         break;
       
   540 
       
   541     case EKeyPageUp:
       
   542     case '1':
       
   543         MovePosition((iFirst + iPosOnScreen - iScreenSize - 1 >= 0) ? (-iScreenSize - 1) : (-iFirst - iPosOnScreen));
       
   544         break;
       
   545 
       
   546     case EKeyPageDown:
       
   547     case '7':
       
   548         MovePosition((iFirst + iPosOnScreen + iScreenSize + 1 < iItemCount) ? (iScreenSize + 1) : (iItemCount - 1 - iFirst - iPosOnScreen));
       
   549         break;
       
   550     default:  // Bypass the keypress
       
   551         break;
       
   552     }
       
   553 
       
   554     // Continue normally and keep in the same menu
       
   555     aContinue = ETrue;
       
   556     return this;
       
   557 
       
   558     }
       
   559 
       
   560 /*
       
   561 -------------------------------------------------------------------------------
       
   562 
       
   563     Class: CMenu
       
   564 
       
   565     Method: ItemText
       
   566 
       
   567     Description: Returns menu item text
       
   568 
       
   569     Parameters: const TInt                :in:      Menu index
       
   570 
       
   571     Return Values: const TDesC&                     Menu line text
       
   572 
       
   573     Errors/Exceptions: None
       
   574 
       
   575     Status: Draft
       
   576 
       
   577 -------------------------------------------------------------------------------
       
   578 */
       
   579 TInt CMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
   580     {
       
   581     
       
   582     TInt count = iItems.Count();
       
   583     for( TInt i=0; i<count; i++ )
       
   584         {
       
   585         if( aArray.Append( iItems[i]->Name() ) != KErrNone )
       
   586             {
       
   587             return KErrNoMemory;
       
   588             }
       
   589         }
       
   590 
       
   591     return KErrNone;
       
   592 
       
   593     }
       
   594     
       
   595 /*
       
   596 -------------------------------------------------------------------------------
       
   597 
       
   598     Class: CMenu
       
   599 
       
   600     Method: SetParent
       
   601 
       
   602     Description: Sets menu parent menu.
       
   603 
       
   604     Parameters: CMenu* aMenu              :in:      Menu parent
       
   605 
       
   606     Return Values: None
       
   607 
       
   608     Errors/Exceptions: None
       
   609 
       
   610     Status: Draft
       
   611 
       
   612 -------------------------------------------------------------------------------
       
   613 */
       
   614 void CMenu::SetParent ( CMenu* aMenu )
       
   615     {
       
   616 
       
   617     iParent = aMenu;
       
   618 
       
   619     }
       
   620 
       
   621 /*
       
   622 -------------------------------------------------------------------------------
       
   623 
       
   624     Class: CMenu
       
   625 
       
   626     Method: Print
       
   627 
       
   628     Description: Prints one line text and changes to next line. If line is
       
   629     too long, overhead is not printed..
       
   630 
       
   631     Parameters: None
       
   632 
       
   633     Return Values: None
       
   634 
       
   635     Errors/Exceptions: None
       
   636 
       
   637     Status: Draft
       
   638     
       
   639 -------------------------------------------------------------------------------
       
   640 */
       
   641 void CMenu::Print( const TDesC& aPrint )
       
   642     {
       
   643     
       
   644     iConsole->Write ( aPrint.Left( iSize.iWidth - KMenuOverhead ) );
       
   645     iConsole->Write(_L("\n"));
       
   646 
       
   647     }
       
   648 
       
   649 /*
       
   650 -------------------------------------------------------------------------------
       
   651 
       
   652     Class: CMenu
       
   653 
       
   654     Method: PrintMulti
       
   655 
       
   656     Description: Prints text. If line is too long, it will be continued to
       
   657     following lines.
       
   658 
       
   659     Parameters: const TDesC& aPrint       :in:      Text to print
       
   660 
       
   661     Return Values: None
       
   662 
       
   663     Errors/Exceptions: None
       
   664 
       
   665     Status: Draft
       
   666 
       
   667 -------------------------------------------------------------------------------
       
   668 */
       
   669 void CMenu::PrintMulti( const TDesC& aPrint )
       
   670     {
       
   671 
       
   672     // Get current line
       
   673     const TInt KMenuOverHead = 2;
       
   674     TInt y = iConsole->WhereY();
       
   675 
       
   676     const TInt KLineLen =iSize.iWidth -4;
       
   677     TBuf<KMaxLineLength+1> oneLine;
       
   678 
       
   679     // Loop through the line
       
   680     for (TInt i = 0; i < aPrint.Length(); i++)
       
   681         {
       
   682         oneLine.Append( aPrint[i] );
       
   683 
       
   684         // Print one line
       
   685         if (oneLine.Length() == KLineLen )
       
   686             {
       
   687             oneLine.Append (_L("\n"));
       
   688             iConsole->Printf(oneLine);
       
   689             oneLine=_L("");
       
   690             y++;
       
   691             }
       
   692     
       
   693         // Prevent display scrolling
       
   694         if ( y == iScreenSize + KMenuOverHead )
       
   695             {
       
   696             oneLine=_L("");
       
   697             break;
       
   698             }
       
   699         }
       
   700 
       
   701     // Print last part if required
       
   702     if ( oneLine.Length() != 0 )
       
   703         {
       
   704         oneLine.Append (_L("\n"));
       
   705         iConsole->Printf(oneLine);
       
   706         }
       
   707 
       
   708     }
       
   709 
       
   710 /*
       
   711 -------------------------------------------------------------------------------
       
   712 
       
   713     Class: CMenu
       
   714 
       
   715     Method: AddItem
       
   716 
       
   717     Description: Add new item to menu
       
   718 
       
   719     Parameters: CMenu* aMenu              :in:      Menu to be added
       
   720 
       
   721     Return Values: None
       
   722 
       
   723     Errors/Exceptions: Leaves if can't add item to menu
       
   724 
       
   725     Status: Draft
       
   726 
       
   727 -------------------------------------------------------------------------------
       
   728 */
       
   729 void CMenu::AddItemL( CMenu* aMenu )
       
   730     {
       
   731 
       
   732     User::LeaveIfError ( iItems.Append (aMenu) );
       
   733     
       
   734     }
       
   735 
       
   736 
       
   737 /*
       
   738 -------------------------------------------------------------------------------
       
   739 
       
   740     Class: CMenu
       
   741 
       
   742     Method: Name
       
   743 
       
   744     Description: Returns menu name
       
   745 
       
   746     Parameters: None
       
   747 
       
   748     Return Values: const TDesC&                     Menu name
       
   749 
       
   750     Errors/Exceptions: None
       
   751 
       
   752     Status: Draft
       
   753 
       
   754 -------------------------------------------------------------------------------
       
   755 */
       
   756 const TDesC& CMenu::Name( ) const
       
   757     {
       
   758 
       
   759     return iName;
       
   760 
       
   761     }
       
   762 
       
   763 /*
       
   764 -------------------------------------------------------------------------------
       
   765 
       
   766     Class: CMenu
       
   767 
       
   768     Method: MapKeyCode
       
   769 
       
   770     Description: Maps numeric keycodes to proper TKeyCode values
       
   771 
       
   772     Parameters: TKeyCode 
       
   773 
       
   774     Return Values: None
       
   775 
       
   776     Errors/Exceptions: None
       
   777 
       
   778     Status: Draft
       
   779 
       
   780 -------------------------------------------------------------------------------
       
   781 */
       
   782 
       
   783 void CMenu::MapKeyCode(TKeyCode &aSelection)
       
   784     {
       
   785     
       
   786     TInt asciiCode = (TInt) aSelection;
       
   787     
       
   788     // Handling numeric keys 2,4,6 and 8
       
   789     
       
   790     if(asciiCode == KMyKeyUpAsciiCode)
       
   791         {
       
   792         aSelection = EKeyUpArrow;
       
   793         }
       
   794         
       
   795     if(asciiCode == KMyKeyLeftAsciiCode)
       
   796         {
       
   797         aSelection = EKeyLeftArrow;
       
   798         }
       
   799 
       
   800     if(asciiCode == KMyKeyRightAsciiCode)
       
   801         {
       
   802         aSelection = EKeyEnter;
       
   803         }
       
   804 
       
   805     if(asciiCode == KMyKeyDownAsciiCode)
       
   806         {
       
   807         aSelection = EKeyDownArrow;
       
   808         }
       
   809     }
       
   810     
       
   811 /*
       
   812 -------------------------------------------------------------------------------
       
   813 
       
   814     Class: CMenu
       
   815 
       
   816     Method: Recalculate
       
   817 
       
   818     Description: Recalculates visible menu elements
       
   819 
       
   820     Parameters: TInt aItemCount    :in:      Menu items count
       
   821 
       
   822     Return Values: None
       
   823 
       
   824     Errors/Exceptions: None
       
   825 
       
   826     Status: Approved
       
   827 
       
   828 -------------------------------------------------------------------------------
       
   829 */
       
   830 void CMenu::Recalculate( TInt aItemCount )
       
   831 	{    
       
   832     TInt oldItemCount = iItemCount;
       
   833      
       
   834     iItemCount = aItemCount;
       
   835  
       
   836     // If first time in menu, update start and end positions
       
   837     if ( ( iFirst == 0 ) && ( iLast == 0 ) || (iItemCount == 0)) //if there are no items, update start and end positions too
       
   838     	{
       
   839     	if ( iItemCount - 1 > iScreenSize  )
       
   840     		{
       
   841     		iLast = iScreenSize;
       
   842     		}
       
   843     	else
       
   844     		{
       
   845     		iLast = iItemCount - 1;
       
   846     		}
       
   847     	iPosOnScreen = 0;
       
   848     	}
       
   849     // New menu entry added, update last visible element if needed
       
   850     else if ( oldItemCount < iItemCount )
       
   851     	{
       
   852     	if ( iFirst + iScreenSize < iItemCount )
       
   853     		{
       
   854     		iLast = iFirst + iScreenSize;
       
   855     		}
       
   856     	else
       
   857     		{
       
   858     		iLast = iItemCount - 1;
       
   859     		}
       
   860     	}
       
   861     // Menu entry removed, update last visible element if needed
       
   862     else if ( oldItemCount > iItemCount )
       
   863     	{
       
   864     	if ( iFirst + iScreenSize < iItemCount )
       
   865     		{
       
   866     		iLast = iFirst + iScreenSize;
       
   867     		}
       
   868     	else if ( iFirst > iItemCount - 1 )
       
   869     		{
       
   870     		iFirst = iItemCount - 1 - iScreenSize;
       
   871     		if ( iFirst < 0 )
       
   872     			{
       
   873     			iFirst = 0;
       
   874     			}
       
   875     		iLast = iItemCount - 1;
       
   876     		iPosOnScreen = iFirst - iLast;
       
   877     		}
       
   878     	else
       
   879     		{
       
   880     		iLast = iItemCount - 1;
       
   881     		}
       
   882     	
       
   883     	if ( iFirst + iPosOnScreen > iLast )
       
   884     		{
       
   885     		iPosOnScreen = iLast - iFirst;
       
   886     		}
       
   887     	}
       
   888     
       
   889     if (iFirst < 0)
       
   890         {
       
   891         iFirst = 0;
       
   892         }
       
   893     if (iLast > iItemCount)
       
   894         {
       
   895         iLast = iItemCount - 1;
       
   896         }
       
   897     if ( iFirst + iScreenSize < iItemCount )
       
   898         {
       
   899         iLast = iFirst + iScreenSize;
       
   900         }
       
   901 	}
       
   902 
       
   903 /*
       
   904 -------------------------------------------------------------------------------
       
   905 
       
   906     Class: CFileNameQueryView
       
   907 
       
   908     Method: NewL
       
   909 
       
   910     Description: Constructs new menu.
       
   911 
       
   912     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
   913                 CMenu* aParent            :in:      Parent menu
       
   914                 const TDesC& aName        :in:      Menu name
       
   915 
       
   916     Return Values: CMenu*                           New menu
       
   917 
       
   918     Errors/Exceptions: Leaves if memory allocation fails
       
   919                        Leaves if ConstructL leaves.
       
   920 
       
   921     Status: Draft
       
   922 
       
   923 -------------------------------------------------------------------------------
       
   924 */
       
   925 CFileNameQueryView* CFileNameQueryView::NewL( CConsoleMain* aConsole,
       
   926                                               CMenu* aParent,
       
   927                                               const TDesC& aName )
       
   928     {
       
   929 
       
   930     CFileNameQueryView* self = new ( ELeave ) CFileNameQueryView();
       
   931     CleanupStack::PushL( self );
       
   932     self->ConstructL( aConsole, aParent, aName );
       
   933     CleanupStack::Pop( self );
       
   934     return self;
       
   935     
       
   936     }
       
   937 
       
   938 /*
       
   939 -------------------------------------------------------------------------------
       
   940 
       
   941     Class: CFileNameQueryView
       
   942 
       
   943     Method: ConstructL
       
   944 
       
   945     Description: Second level constructor.
       
   946 
       
   947     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
   948                 CMenu* aParent            :in:      Parent menu
       
   949                 const TDesC& aName        :in:      Menu name
       
   950 
       
   951     Return Values: None
       
   952 
       
   953     Errors/Exceptions: None
       
   954 
       
   955     Status: Draft
       
   956 
       
   957 -------------------------------------------------------------------------------
       
   958 */
       
   959 void CFileNameQueryView::ConstructL( CConsoleMain* aConsole, 
       
   960                                      CMenu* aParent, 
       
   961                                      const TDesC& aName 
       
   962                                     )
       
   963     {
       
   964 
       
   965     CMenu::ConstructL( aConsole, aParent, aName);
       
   966 
       
   967     }
       
   968 
       
   969 /*
       
   970 -------------------------------------------------------------------------------
       
   971 
       
   972     Class: CFileNameQueryView
       
   973 
       
   974     Method: ~CFileNameQueryView
       
   975 
       
   976     Description: Destructor
       
   977 
       
   978     Parameters: None
       
   979 
       
   980     Return Values: None
       
   981 
       
   982     Errors/Exceptions: None
       
   983 
       
   984     Status: Draft
       
   985     
       
   986 -------------------------------------------------------------------------------
       
   987 */
       
   988 CFileNameQueryView::~CFileNameQueryView()
       
   989     {
       
   990 
       
   991     iTestModuleNames.ResetAndDestroy();
       
   992     iTestModuleNames.Close();
       
   993     
       
   994     }
       
   995     
       
   996 /*
       
   997 -------------------------------------------------------------------------------
       
   998 
       
   999     Class: CFileNameQueryView
       
  1000 
       
  1001     Method: ItemText
       
  1002 
       
  1003     Description: Returns menu item text.
       
  1004 
       
  1005     Parameters: const TInt                :in:      Menu index
       
  1006 
       
  1007     Return Values: const TDesC&                     Menu line text
       
  1008 
       
  1009     Errors/Exceptions: None
       
  1010 
       
  1011     Status: Draft
       
  1012 
       
  1013 -------------------------------------------------------------------------------
       
  1014 */
       
  1015 TInt CFileNameQueryView::ItemTexts( RRefArray<TDesC>& aArray )
       
  1016     {
       
  1017     
       
  1018     iTestModuleNames.ResetAndDestroy();    
       
  1019     
       
  1020     // Add loaded module names to menu
       
  1021     TInt ret = iMain->UIStore().ListAllModules( iTestModuleNames );
       
  1022 
       
  1023     if( ret != KErrNone )
       
  1024         {                 
       
  1025         return ret;
       
  1026         }
       
  1027         
       
  1028     TInt count = iTestModuleNames.Count();
       
  1029     for( TInt i=0; i<count; i++ )
       
  1030         {
       
  1031         if( aArray.Append( *iTestModuleNames[i] ) != KErrNone )
       
  1032             {
       
  1033             return KErrNoMemory;
       
  1034             }
       
  1035         }
       
  1036 
       
  1037     return KErrNone; 
       
  1038 
       
  1039     }
       
  1040 
       
  1041 /*
       
  1042 -------------------------------------------------------------------------------
       
  1043 
       
  1044     Class: CFileNameQueryView
       
  1045 
       
  1046     Method: SelectL
       
  1047 
       
  1048     Description: Process keypresses in menu. Just return the parent menu
       
  1049 
       
  1050     Parameters: TKeyCode aSelection       :in:      Not used
       
  1051                 TBool& aContinue          :out:     Has user pressed "Quit"?
       
  1052 
       
  1053     Return Values: CMenu*                           New menu
       
  1054 
       
  1055     Errors/Exceptions: None
       
  1056 
       
  1057     Status: Draft
       
  1058 
       
  1059 -------------------------------------------------------------------------------
       
  1060 */
       
  1061 CMenu* CFileNameQueryView::SelectL( TKeyCode aSelection, 
       
  1062                                     TBool& aContinue )
       
  1063     {  
       
  1064     
       
  1065     MapKeyCode(aSelection);
       
  1066 
       
  1067     if (aSelection == EKeyEnter || aSelection == EKeyRightArrow )
       
  1068         {
       
  1069         if( iPosOnScreen < iTestModuleNames.Count() )
       
  1070             {
       
  1071             TInt ret = 
       
  1072                 iMain->UIStore().AddTestModule( *iTestModuleNames[iPosOnScreen] );
       
  1073             if( ret != KErrNone )
       
  1074                 {
       
  1075                 TErrorNotification error;
       
  1076                 error.iModule.Copy( _L("ConsoleUI") );
       
  1077                 error.iText.Copy( _L("Failed to load test module ") );
       
  1078                 error.iText.Append( *iTestModuleNames[iPosOnScreen] );
       
  1079                 error.iText.Append( _L(" error "));
       
  1080                 error.iText.AppendNum( ret );
       
  1081                 iMain->Error( error );
       
  1082                 }
       
  1083             return iParent;
       
  1084             }
       
  1085         else
       
  1086             {
       
  1087             return this;
       
  1088             }
       
  1089         }  
       
  1090 
       
  1091     return CMenu::SelectL( aSelection, aContinue );
       
  1092 
       
  1093     }
       
  1094 
       
  1095 
       
  1096 /*
       
  1097 -------------------------------------------------------------------------------
       
  1098 
       
  1099     Class: CMainMenu
       
  1100 
       
  1101     Method: NewL
       
  1102 
       
  1103     Description: Constructs new menu.
       
  1104 
       
  1105     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  1106                 CMenu* aParent            :in:      Parent menu
       
  1107                 const TDesC& aName        :in:      Menu name
       
  1108                 const TDesC& aHeader	  :in:		Text containing STIF version information
       
  1109 
       
  1110     Return Values: CMenu*                           New menu
       
  1111 
       
  1112     Errors/Exceptions: Leaves if memory allocation fails
       
  1113                        Leaves if ConstructL leaves.
       
  1114 
       
  1115     Status: Draft
       
  1116 
       
  1117 -------------------------------------------------------------------------------
       
  1118 */
       
  1119 CMainMenu* CMainMenu::NewL( CConsoleMain* aConsole,
       
  1120                             CMenu* aParent,
       
  1121                             const TDesC& aName,
       
  1122                             const TDesC& aHeader)
       
  1123     {
       
  1124 
       
  1125     CMainMenu* self = new ( ELeave ) CMainMenu();
       
  1126     CleanupStack::PushL( self );
       
  1127     self->ConstructL( aConsole, aParent, aName, aHeader );
       
  1128     CleanupStack::Pop( self );
       
  1129     return self;
       
  1130 
       
  1131     }
       
  1132 
       
  1133 /*
       
  1134 -------------------------------------------------------------------------------
       
  1135 
       
  1136     CMainMenu
       
  1137 
       
  1138     Method: ~CMainMenu
       
  1139 
       
  1140     Description: Destructor
       
  1141 
       
  1142     Parameters: None
       
  1143 
       
  1144     Return Values: None
       
  1145 
       
  1146     Errors/Exceptions: None
       
  1147 
       
  1148     Status: Draft
       
  1149 
       
  1150 -------------------------------------------------------------------------------
       
  1151 */
       
  1152 CMainMenu::~CMainMenu()
       
  1153     {
       
  1154     delete iOutputView;
       
  1155     iOutputView = NULL;
       
  1156     delete iOperationMenu;
       
  1157     iOperationMenu = NULL;
       
  1158     }
       
  1159 
       
  1160 /*
       
  1161 -------------------------------------------------------------------------------
       
  1162 
       
  1163     Class: CMainMenu
       
  1164 
       
  1165     Method: ItemText
       
  1166 
       
  1167     Description: Returns menu item text. Add "Exit" to normal SelectLion
       
  1168 
       
  1169     Parameters: const TInt                :in:      Menu index
       
  1170 
       
  1171     Return Values: const TDesC&                     Menu line text
       
  1172 
       
  1173     Errors/Exceptions: None
       
  1174 
       
  1175     Status: Draft
       
  1176 
       
  1177 -------------------------------------------------------------------------------
       
  1178 */
       
  1179 TInt CMainMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  1180     {
       
  1181     
       
  1182     TInt ret = CMenu::ItemTexts( aArray );
       
  1183     if ( ret != KErrNone )
       
  1184     	{
       
  1185     	return ret;
       
  1186     	}
       
  1187     // Add Exit to last one in menu
       
  1188     if( aArray.Append( KExitTxt ) != KErrNone )
       
  1189         {
       
  1190         return KErrNoMemory;
       
  1191         }
       
  1192 
       
  1193     return KErrNone;
       
  1194     }
       
  1195 
       
  1196 /*
       
  1197 -------------------------------------------------------------------------------
       
  1198 
       
  1199     Class: CMainMenu
       
  1200 
       
  1201     Method: ConstructL
       
  1202 
       
  1203     Description: Second level constructor.
       
  1204 
       
  1205     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  1206                 CMenu* aParent            :in:      Parent menu
       
  1207                 const TDesC& aName        :in:      Menu name
       
  1208                 const TDesC& aHeader	  :in:		Text containing STIF version information
       
  1209 
       
  1210     Return Values: None
       
  1211 
       
  1212     Errors/Exceptions: None
       
  1213 
       
  1214     Status: Draft
       
  1215 
       
  1216 -------------------------------------------------------------------------------
       
  1217 */
       
  1218 void CMainMenu::ConstructL( CConsoleMain* aConsole, 
       
  1219                             CMenu* aParent,
       
  1220                             const TDesC& aName,
       
  1221                             const TDesC& aHeader
       
  1222                           )
       
  1223     {
       
  1224     CMenu::ConstructL( aConsole, aParent, aName, aHeader);
       
  1225     iOutputView = NULL;
       
  1226     iOperationMenu = NULL;
       
  1227     }
       
  1228 
       
  1229 /*
       
  1230 -------------------------------------------------------------------------------
       
  1231 
       
  1232     Class: CMainMenu
       
  1233 
       
  1234     Method: SelectL
       
  1235 
       
  1236     Description: Process keypresses in menu. Handle SelectLion in this
       
  1237     method, other keys are handles in CMenu class.
       
  1238 
       
  1239     Parameters: TKeyCode aSelection       :in:      Key
       
  1240                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  1241 
       
  1242     Return Values: CMenu*                           New menu
       
  1243 
       
  1244     Errors/Exceptions: None
       
  1245 
       
  1246     Status: Draft
       
  1247 
       
  1248 -------------------------------------------------------------------------------
       
  1249 */
       
  1250 CMenu* CMainMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  1251     {
       
  1252 
       
  1253     MapKeyCode(aSelection);
       
  1254     
       
  1255     // If SelectLion == "exit" and right or enter
       
  1256     if (aSelection == EKeyEnter || aSelection == EKeyRightArrow )
       
  1257         {
       
  1258         if ( iPosOnScreen == iItemCount-1 )
       
  1259             {
       
  1260             // Exit
       
  1261             aContinue = EFalse;
       
  1262             return this;
       
  1263             }
       
  1264         }
       
  1265 
       
  1266     // Normal menu handling
       
  1267     CMenu* tmp = CMenu::SelectL(aSelection, aContinue);
       
  1268     return tmp;
       
  1269 
       
  1270     }
       
  1271 
       
  1272 /*
       
  1273 -------------------------------------------------------------------------------
       
  1274 
       
  1275     Class: CMainMenu
       
  1276 
       
  1277     Method: CreateOutputViewL
       
  1278 
       
  1279     Description: Creates test case output view.
       
  1280 
       
  1281     Parameters: CMenu* aParent: parent menu for case operation menu
       
  1282 
       
  1283     Return Values: CMenu*        New menu
       
  1284 
       
  1285     Errors/Exceptions: Leaves is CCaseExecutionView menu leaves during creation
       
  1286 
       
  1287     Status: Draft
       
  1288 
       
  1289 -------------------------------------------------------------------------------
       
  1290 */
       
  1291 CMenu* CMainMenu::CreateOutputViewL(CMenu* aParent)
       
  1292     {
       
  1293     // Get test cases that have been run
       
  1294     RRefArray<CStartedTestCase> startedTestCases;
       
  1295     CleanupClosePushL(startedTestCases);
       
  1296     CMenu* res = NULL;
       
  1297 
       
  1298     startedTestCases.Reset();
       
  1299     if(iMain->UIStore().StartedTestCases(startedTestCases, CUIStoreIf::EStatusAll) == KErrNone)
       
  1300         {                 
       
  1301         TInt count = startedTestCases.Count();
       
  1302         if(count > 0)
       
  1303             {
       
  1304             // Create menu with execution info
       
  1305             const CStartedTestCase* caseContainer = &startedTestCases[count - 1];
       
  1306             delete iOutputView;
       
  1307             iOutputView = NULL;
       
  1308             delete iOperationMenu;
       
  1309             iOperationMenu = NULL;
       
  1310 
       
  1311             iOperationMenu = CCaseOperationMenu::NewL(iMain,
       
  1312                                                       aParent, //back to parent menu
       
  1313                                                       caseContainer->TestInfo().TestCaseTitle(),
       
  1314                                                       caseContainer
       
  1315                                                      );
       
  1316 
       
  1317             iOutputView = CCaseExecutionView::NewL(iMain,
       
  1318                                                    iOperationMenu, //back to Case Operation Menu
       
  1319                                                    caseContainer->TestInfo().TestCaseTitle(),
       
  1320                                                    caseContainer
       
  1321                                                   );
       
  1322             res = iOutputView;
       
  1323             }
       
  1324         }
       
  1325         
       
  1326     CleanupStack::PopAndDestroy(&startedTestCases);
       
  1327     return res;
       
  1328     }
       
  1329 
       
  1330 /*
       
  1331 -------------------------------------------------------------------------------
       
  1332 
       
  1333     Class: CModuleListView
       
  1334 
       
  1335     Method: NewL
       
  1336 
       
  1337     Description: Constructs new menu.
       
  1338 
       
  1339     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  1340                 CMenu* aParent            :in:      Parent menu
       
  1341                 const TDesC& aName        :in:      Menu name
       
  1342 
       
  1343     Return Values: CMenu*                           New menu
       
  1344 
       
  1345     Errors/Exceptions: Leaves if memory allocation fails
       
  1346                        Leaves if ConstructL leaves.
       
  1347 
       
  1348     Status: Draft
       
  1349 
       
  1350 -------------------------------------------------------------------------------
       
  1351 */
       
  1352 CModuleListView* CModuleListView::NewL( CConsoleMain* aConsole,
       
  1353                                         CMenu* aParent,
       
  1354                                         const TDesC& aName )
       
  1355     {    
       
  1356 
       
  1357     CModuleListView* self = new ( ELeave ) CModuleListView();
       
  1358     CleanupStack::PushL( self );
       
  1359     self->ConstructL( aConsole, aParent, aName );
       
  1360     CleanupStack::Pop( self );
       
  1361     return self;
       
  1362     
       
  1363     }
       
  1364 /*
       
  1365 -------------------------------------------------------------------------------
       
  1366 
       
  1367     Class: CModuleListView
       
  1368 
       
  1369     Method: ~CModuleListView
       
  1370 
       
  1371     Description: Destructor
       
  1372 
       
  1373     Parameters: None
       
  1374 
       
  1375     Return Values: None
       
  1376 
       
  1377     Errors/Exceptions: None
       
  1378 
       
  1379     Status: Draft
       
  1380     
       
  1381 -------------------------------------------------------------------------------
       
  1382 */
       
  1383 CModuleListView::~CModuleListView()
       
  1384     {
       
  1385     delete iModuleAdd;
       
  1386     }
       
  1387 
       
  1388 /*
       
  1389 -------------------------------------------------------------------------------
       
  1390 
       
  1391     Class: CModuleListView
       
  1392 
       
  1393     Method: ConstructL
       
  1394 
       
  1395     Description: Second level constructor. 
       
  1396 
       
  1397     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  1398                 CMenu* aParent            :in:      Parent menu
       
  1399                 const TDesC& aName        :in:      Menu name
       
  1400 
       
  1401     Return Values: None
       
  1402 
       
  1403     Errors/Exceptions: Leaves if parent class ConstructL leaves
       
  1404                        Leaves if module can't be appended to list
       
  1405 
       
  1406     Status: Draft
       
  1407 
       
  1408 -------------------------------------------------------------------------------
       
  1409 */
       
  1410 void CModuleListView::ConstructL( CConsoleMain* aConsole,
       
  1411                                   CMenu* aParent,
       
  1412                                   const TDesC& aName
       
  1413                                  )
       
  1414     {
       
  1415 
       
  1416     CMenu::ConstructL( aConsole, aParent, aName);
       
  1417    
       
  1418     // Construct module menu
       
  1419     iModuleAdd  = CFileNameQueryView::NewL ( iMain, this, KSelectMenuTxt );    
       
  1420 
       
  1421     }
       
  1422 
       
  1423 /*
       
  1424 -------------------------------------------------------------------------------
       
  1425 
       
  1426     Class: CModuleListView
       
  1427 
       
  1428     Method: ItemText
       
  1429 
       
  1430     Description: Returns menu item text.
       
  1431 
       
  1432     Parameters: const TInt                :in:      Menu index
       
  1433 
       
  1434     Return Values: const TDesC&                     Menu line text
       
  1435 
       
  1436     Errors/Exceptions: None
       
  1437 
       
  1438     Status: Draft
       
  1439 
       
  1440 -------------------------------------------------------------------------------
       
  1441 */
       
  1442 TInt CModuleListView::ItemTexts( RRefArray<TDesC>& aArray )
       
  1443     {
       
  1444     // Add also "Add module" text
       
  1445     if( aArray.Append( KAddMenuTxt ) != KErrNone )
       
  1446         {
       
  1447         return KErrNoMemory;
       
  1448         }
       
  1449     if( aArray.Append( KLoadMenuTxt ) != KErrNone )
       
  1450         {
       
  1451         return KErrNoMemory;
       
  1452         } 
       
  1453         
       
  1454     return KErrNone; 
       
  1455 
       
  1456     }
       
  1457 
       
  1458 /*
       
  1459 -------------------------------------------------------------------------------
       
  1460     Class: CModuleListView
       
  1461 
       
  1462     Method: PrintMenuL
       
  1463 
       
  1464     Description: Prints the menu
       
  1465 
       
  1466     Parameters: None
       
  1467 
       
  1468     Return Values: None
       
  1469 
       
  1470     Errors/Exceptions: None
       
  1471 
       
  1472     Status: Draft
       
  1473     
       
  1474 -------------------------------------------------------------------------------
       
  1475 */
       
  1476 void CModuleListView::PrintMenuL( TUpdateType aType )
       
  1477     {
       
  1478     
       
  1479     // Get module names
       
  1480     RRefArray<TDesC> modules;
       
  1481     TInt ret = iMain->UIStore().Modules( modules );
       
  1482 
       
  1483     CMenu::PrintMenuL( aType );
       
  1484     
       
  1485     // Add loaded module names to menu
       
  1486     if( ret != KErrNone )
       
  1487         {
       
  1488         modules.Reset();
       
  1489         modules.Close();
       
  1490         return;
       
  1491         }
       
  1492         
       
  1493     TBuf<KMaxLineLength> line;
       
  1494     TInt count = modules.Count();
       
  1495     for( TInt i=0; i<count; i++ )
       
  1496         {
       
  1497         line = _L("    ");
       
  1498         LimitedAppend ( line, modules[i] );
       
  1499 
       
  1500         // Print the line
       
  1501         Print(line);
       
  1502         }
       
  1503     modules.Reset();
       
  1504     modules.Close();
       
  1505     
       
  1506     }
       
  1507     
       
  1508 /*
       
  1509 -------------------------------------------------------------------------------
       
  1510 
       
  1511     Class: CModuleListView
       
  1512 
       
  1513     Method: SelectL
       
  1514 
       
  1515     Description: Process keypresses in menu. Handle right arrow and enter
       
  1516                  here, others in parent menu.
       
  1517 
       
  1518     Parameters: TKeyCode aSelection       :in:      Key
       
  1519                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  1520 
       
  1521     Return Values: CMenu*                           New menu
       
  1522 
       
  1523     Errors/Exceptions: None
       
  1524 
       
  1525     Status: Draft
       
  1526 
       
  1527 -------------------------------------------------------------------------------
       
  1528 */
       
  1529 CMenu* CModuleListView::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  1530     {
       
  1531     
       
  1532     MapKeyCode(aSelection);
       
  1533 
       
  1534     if( ( aSelection == EKeyRightArrow ||
       
  1535             aSelection == EKeyEnter ) )
       
  1536         {
       
  1537         if( iPosOnScreen == EAddMenuTxtItem )
       
  1538             {
       
  1539             return iModuleAdd;
       
  1540             }
       
  1541         else if( iPosOnScreen == ELoadMenuTxtItem )
       
  1542             {
       
  1543             iMain->UIStore().LoadAllModules();
       
  1544             return this;
       
  1545             }
       
  1546         else 
       
  1547             {
       
  1548             return this;
       
  1549             }
       
  1550         }
       
  1551 
       
  1552     return CMenu::SelectL( aSelection, aContinue );
       
  1553 
       
  1554     }
       
  1555 
       
  1556 /*
       
  1557 -------------------------------------------------------------------------------
       
  1558 
       
  1559     Class: CCaseStartMenu
       
  1560 
       
  1561     Method: NewL
       
  1562 
       
  1563     Description: Constructs new menu.
       
  1564 
       
  1565     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  1566                 CMenu* aParent            :in:      Parent menu
       
  1567                 const TDesC& aName        :in:      Menu name
       
  1568                 TBool aShowOutput         :in:      Show output after test case is run
       
  1569 
       
  1570     Return Values: CMenu*                           New menu
       
  1571 
       
  1572     Errors/Exceptions: Leaves if memory allocation fails
       
  1573                        Leaves if ConstructL leaves.
       
  1574 
       
  1575     Status: Draft
       
  1576 
       
  1577 -------------------------------------------------------------------------------
       
  1578 */
       
  1579 CCaseStartMenu* CCaseStartMenu::NewL( CConsoleMain* aConsole,
       
  1580                                       CMenu* aParent,
       
  1581                                       const TDesC& aName,
       
  1582                                       TBool aShowOutput)
       
  1583     {
       
  1584 
       
  1585     CCaseStartMenu* self = new ( ELeave ) CCaseStartMenu();
       
  1586     CleanupStack::PushL( self );
       
  1587     self->ConstructL( aConsole, aParent, aName, aShowOutput );
       
  1588     CleanupStack::Pop( self );
       
  1589     return self;
       
  1590     
       
  1591     }
       
  1592 
       
  1593 /*
       
  1594 -------------------------------------------------------------------------------
       
  1595 
       
  1596     Class: CCaseStartMenu
       
  1597 
       
  1598     Method: ConstructL
       
  1599 
       
  1600     Description: Second level constructor.
       
  1601 
       
  1602     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  1603                 CMenu* aParent            :in:      Parent menu
       
  1604                 const TDesC& aName        :in:      Menu name
       
  1605 
       
  1606     Return Values: None
       
  1607 
       
  1608     Errors/Exceptions: None
       
  1609 
       
  1610     Status: Draft
       
  1611 
       
  1612 -------------------------------------------------------------------------------
       
  1613 */
       
  1614 void CCaseStartMenu::ConstructL( CConsoleMain* aConsole,
       
  1615                                  CMenu* aParent,
       
  1616                                  const TDesC& aName,
       
  1617                                  TBool aShowOutput
       
  1618                                )
       
  1619     {
       
  1620 
       
  1621     iShowOutput = aShowOutput;
       
  1622     CMenu::ConstructL( aConsole, aParent, aName);
       
  1623 
       
  1624     }
       
  1625 
       
  1626 /*
       
  1627 -------------------------------------------------------------------------------
       
  1628 
       
  1629     CCaseStartMenu
       
  1630 
       
  1631     Method: ~CCaseStartMenu
       
  1632 
       
  1633     Description: Destructor
       
  1634 
       
  1635     Parameters: None
       
  1636 
       
  1637     Return Values: None
       
  1638 
       
  1639     Errors/Exceptions: None
       
  1640 
       
  1641     Status: Draft
       
  1642 
       
  1643 -------------------------------------------------------------------------------
       
  1644 */
       
  1645 CCaseStartMenu::~CCaseStartMenu()
       
  1646     {
       
  1647     iTestCases.Close();
       
  1648 
       
  1649     iMapFilteredToAll.Reset();
       
  1650     iMapFilteredToAll.Close();
       
  1651     }
       
  1652     
       
  1653 /*
       
  1654 -------------------------------------------------------------------------------
       
  1655 
       
  1656     Class: CCaseStartMenu
       
  1657 
       
  1658     Method: ItemText
       
  1659 
       
  1660     Description: Returns menu item text
       
  1661 
       
  1662     Parameters: const TInt                :in:      Menu index
       
  1663 
       
  1664     Return Values: const TDesC&                     Menu line text
       
  1665 
       
  1666     Errors/Exceptions: None
       
  1667 
       
  1668     Status: Draft
       
  1669 
       
  1670 -------------------------------------------------------------------------------
       
  1671 */
       
  1672 TInt CCaseStartMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  1673     {
       
  1674 
       
  1675     iTestCases.Reset();
       
  1676     TInt ret = iMain->UIStore().TestCases( iTestCases );
       
  1677     if( ret != KErrNone )
       
  1678         {
       
  1679         return ret;
       
  1680         }
       
  1681     
       
  1682     const RPointerArray<TDesC> &filters = iMain->GetFilterArray();
       
  1683     const TInt filterindex = iMain->GetFilterIndex(); 
       
  1684     iMapFilteredToAll.Reset();
       
  1685     
       
  1686     TInt count = iTestCases.Count();
       
  1687     for( TInt i = 0; i < count; i++ )
       
  1688         {
       
  1689         //If user has chosen filter, let's apply it
       
  1690         if(filterindex > 0) //skip the first filter which always is "No filter"
       
  1691             {
       
  1692             //Check whether test title is matching the applied filter
       
  1693             iTitleLowerCase.Copy(iTestCases[i].TestCaseTitle());
       
  1694             iTitleLowerCase.LowerCase();
       
  1695             iFilterLowerCase.Copy(*filters[filterindex]);
       
  1696             iFilterLowerCase.LowerCase();
       
  1697 
       
  1698             if(iTitleLowerCase.Match(iFilterLowerCase) != KErrNotFound)
       
  1699                 {
       
  1700                 ret = aArray.Append(iTestCases[i].TestCaseTitle());
       
  1701                 if(ret != KErrNone)
       
  1702                     {
       
  1703                     return ret;
       
  1704                     }
       
  1705                 ret = iMapFilteredToAll.Append(i);
       
  1706                 if(ret != KErrNone)
       
  1707                     {
       
  1708                     return ret;
       
  1709                     }                
       
  1710                 }
       
  1711             }
       
  1712         else
       
  1713             {
       
  1714             ret = aArray.Append( iTestCases[i].TestCaseTitle() );
       
  1715             if(ret != KErrNone)
       
  1716                 {
       
  1717                 return ret;
       
  1718                 }
       
  1719             ret = iMapFilteredToAll.Append(i);
       
  1720             if(ret != KErrNone)
       
  1721                 {
       
  1722                 return ret;
       
  1723                 }                
       
  1724             }
       
  1725         }
       
  1726         
       
  1727     return KErrNone;
       
  1728     }
       
  1729 
       
  1730 /*
       
  1731 -------------------------------------------------------------------------------
       
  1732 
       
  1733     Class: CCaseStartMenu
       
  1734 
       
  1735     Method: SelectL
       
  1736 
       
  1737     Description: Process keypresses in menu. Handle enter and right arrow here,
       
  1738     others in CMenu::SelectL.
       
  1739 
       
  1740     Parameters: TKeyCode aSelection       :in:      Key
       
  1741                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  1742 
       
  1743     Return Values: CMenu*                           New menu
       
  1744 
       
  1745     Errors/Exceptions: None
       
  1746 
       
  1747     Status: Draft
       
  1748 
       
  1749 -------------------------------------------------------------------------------
       
  1750 */
       
  1751 CMenu* CCaseStartMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  1752     {
       
  1753 
       
  1754     MapKeyCode(aSelection);
       
  1755     
       
  1756     switch ( aSelection )
       
  1757         {
       
  1758         case EKeyEnter:
       
  1759         case EKeyRightArrow:
       
  1760             {
       
  1761             // Start the case
       
  1762             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
       
  1763                 {
       
  1764                 TInt index;
       
  1765                 User::LeaveIfError( 
       
  1766                     iMain->UIStore().StartTestCase( 
       
  1767                         iTestCases[iMapFilteredToAll[iFirst + iPosOnScreen]], index ) );
       
  1768                 // Create output screen (menu) if needed
       
  1769                 if(iShowOutput)
       
  1770                     {
       
  1771                     CMenu* m = iMain->GetMainMenu()->CreateOutputViewL(iParent);
       
  1772                     if(m)
       
  1773                         return m;
       
  1774                     }
       
  1775                 return iParent;
       
  1776                 }
       
  1777             else
       
  1778                 {
       
  1779                 return this;
       
  1780                 }
       
  1781             }
       
  1782 
       
  1783         default:
       
  1784             return CMenu::SelectL( aSelection, aContinue);
       
  1785         }
       
  1786 
       
  1787     }
       
  1788 
       
  1789 /*
       
  1790 -------------------------------------------------------------------------------
       
  1791 
       
  1792     CMultipleBaseMenu
       
  1793 
       
  1794     Method: NewL
       
  1795 
       
  1796     Description: Constructs new menu.
       
  1797 
       
  1798     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  1799                 CMenu* aParent            :in:      Parent menu
       
  1800                 const TDesC& aName        :in:      Menu name
       
  1801 
       
  1802     Return Values: CMenu*                           New menu
       
  1803 
       
  1804     Errors/Exceptions: Leaves if memory allocation fails
       
  1805                        Leaves if ConstructL leaves.
       
  1806 
       
  1807     Status: Draft
       
  1808 
       
  1809 -------------------------------------------------------------------------------
       
  1810 */
       
  1811 CMultipleBaseMenu* CMultipleBaseMenu::NewL( CConsoleMain* aConsole,
       
  1812                                             CMenu* aParent,
       
  1813                                             const TDesC& aName )
       
  1814     {
       
  1815 
       
  1816     CMultipleBaseMenu* self = new ( ELeave ) CMultipleBaseMenu();
       
  1817     CleanupStack::PushL( self );
       
  1818     self->ConstructL( aConsole, aParent, aName );
       
  1819     CleanupStack::Pop( self );
       
  1820     return self;
       
  1821     
       
  1822     }
       
  1823 
       
  1824 /*
       
  1825 -------------------------------------------------------------------------------
       
  1826 
       
  1827     CMultipleBaseMenu
       
  1828 
       
  1829     Method: CMultipleBaseMenu
       
  1830 
       
  1831     Description: Constructor
       
  1832 
       
  1833     Parameters: None
       
  1834 
       
  1835     Return Values: None
       
  1836 
       
  1837     Errors/Exceptions: None
       
  1838 
       
  1839     Status: Draft
       
  1840 
       
  1841 -------------------------------------------------------------------------------
       
  1842 */
       
  1843 CMultipleBaseMenu::CMultipleBaseMenu(): 
       
  1844     iSetFinished( ETrue ),
       
  1845     iRunType( ERunSequential ),
       
  1846     iMenuTotCount( 0 ),
       
  1847     iMenuCount( 0 )
       
  1848     {
       
  1849     
       
  1850     iMenuCount = EChangeAll + 1;
       
  1851     iMenuTotCount = iMenuCount;
       
  1852     
       
  1853     }   
       
  1854     
       
  1855 /*
       
  1856 -------------------------------------------------------------------------------
       
  1857 
       
  1858     CMultipleBaseMenu
       
  1859 
       
  1860     Method: ~CMultipleBaseMenu
       
  1861 
       
  1862     Description: Destructor
       
  1863 
       
  1864     Parameters: None
       
  1865 
       
  1866     Return Values: None
       
  1867 
       
  1868     Errors/Exceptions: None
       
  1869 
       
  1870     Status: Draft
       
  1871 
       
  1872 -------------------------------------------------------------------------------
       
  1873 */
       
  1874 CMultipleBaseMenu::~CMultipleBaseMenu()
       
  1875     {
       
  1876     
       
  1877     iSetState.Close();
       
  1878     
       
  1879     }   
       
  1880 
       
  1881 /*
       
  1882 -------------------------------------------------------------------------------
       
  1883 
       
  1884     Class: CMultipleBaseMenu
       
  1885 
       
  1886     Method: ConstructL
       
  1887 
       
  1888     Description: Second level constructor.
       
  1889 
       
  1890     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  1891                 CMenu* aParent            :in:      Parent menu
       
  1892                 const TDesC& aName        :in:      Menu name
       
  1893 
       
  1894     Return Values: None
       
  1895 
       
  1896     Errors/Exceptions: None
       
  1897 
       
  1898     Status: Draft
       
  1899 
       
  1900 -------------------------------------------------------------------------------
       
  1901 */
       
  1902 void CMultipleBaseMenu::ConstructL( CConsoleMain* aConsole,
       
  1903                                CMenu* aParent,
       
  1904                                const TDesC& aName 
       
  1905                              )
       
  1906     {
       
  1907 
       
  1908     CCaseStartMenu::ConstructL( aConsole, aParent, aName );
       
  1909 
       
  1910     }
       
  1911 
       
  1912 
       
  1913 /*
       
  1914 -------------------------------------------------------------------------------
       
  1915 
       
  1916     Class: CMultipleBaseMenu
       
  1917 
       
  1918     Method: ItemText
       
  1919 
       
  1920     Description: Returns menu item text
       
  1921 
       
  1922     Parameters: const TInt                :in:      Menu index
       
  1923 
       
  1924     Return Values: const TDesC&                     Menu line text
       
  1925 
       
  1926     Errors/Exceptions: None
       
  1927 
       
  1928     Status: Draft
       
  1929 
       
  1930 -------------------------------------------------------------------------------
       
  1931 */
       
  1932 TInt CMultipleBaseMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  1933     {
       
  1934 
       
  1935     if ( iSetFinished )
       
  1936         {
       
  1937         if( aArray.Append( KChangeAll ) != KErrNone )
       
  1938             {
       
  1939             return KErrNoMemory;
       
  1940             }
       
  1941         
       
  1942         if( iUpdateType ==  EMenuPrint )
       
  1943             {   
       
  1944             TInt ret = UpdateTestCases();
       
  1945             if( ret != KErrNone )
       
  1946                 {                 
       
  1947                 return ret;
       
  1948                 }
       
  1949             }
       
  1950         TInt count = iTestCases.Count();
       
  1951         for( TInt j=0; j<count; j++ )
       
  1952             {
       
  1953             if( aArray.Append( iTestCases[j].TestCaseTitle() ) 
       
  1954                 != KErrNone )
       
  1955                 {
       
  1956                 return KErrNoMemory;
       
  1957                 }
       
  1958             if( aArray.Count() > iSetState.Count())
       
  1959                 {
       
  1960                 // Appends iSetState only if aArray's size is bigger @js
       
  1961                 if( iSetState.Append(EFalse) != KErrNone )
       
  1962                     {
       
  1963                     return KErrNoMemory;
       
  1964                     }
       
  1965                 }
       
  1966             }
       
  1967         }
       
  1968     else
       
  1969         {
       
  1970         if( aArray.Append( KCancelSet ) != KErrNone )
       
  1971             {
       
  1972             return KErrNoMemory;
       
  1973             }
       
  1974         }
       
  1975     
       
  1976     return KErrNone;
       
  1977     
       
  1978     }
       
  1979 
       
  1980 /*
       
  1981 -------------------------------------------------------------------------------
       
  1982     Class: CMultipleBaseMenu
       
  1983 
       
  1984     Method: AppendBefore
       
  1985 
       
  1986     Description: Append text before line.
       
  1987 
       
  1988     Parameters: TInt aLine: in: line number 
       
  1989                 TDes& aLine: in: line text
       
  1990 
       
  1991     Return Values: None
       
  1992 
       
  1993     Errors/Exceptions: None
       
  1994 
       
  1995     Status: Draft
       
  1996     
       
  1997 -------------------------------------------------------------------------------
       
  1998 */
       
  1999 void CMultipleBaseMenu::AppendBefore( TInt aLineNum, TDes& aLine )
       
  2000     {
       
  2001     
       
  2002     CMenu::AppendBefore( aLineNum, aLine );
       
  2003     if( ( aLine.MaxLength() - aLine.Length() ) < 2 )
       
  2004         {
       
  2005         return;
       
  2006         }        
       
  2007     
       
  2008     if( aLineNum >= iMenuTotCount )
       
  2009         {
       
  2010         if ( iSetState[ aLineNum - iMenuTotCount ] )
       
  2011             {
       
  2012             aLine.Append(_L("S "));
       
  2013             }
       
  2014         else
       
  2015             {
       
  2016             aLine.Append(_L("  "));
       
  2017             }
       
  2018         }
       
  2019    
       
  2020     }
       
  2021 
       
  2022 /*
       
  2023 -------------------------------------------------------------------------------
       
  2024 
       
  2025     Class: CMultipleBaseMenu
       
  2026 
       
  2027     Method: SelectL
       
  2028 
       
  2029     Description: Process keypresses in menu. Handle enter and right arrow here,
       
  2030     others in CMenu::SelectL.
       
  2031 
       
  2032     Parameters: TKeyCode aSelection       :in:      Key
       
  2033                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  2034 
       
  2035     Return Values: CMenu*                           New menu
       
  2036 
       
  2037     Errors/Exceptions: None
       
  2038 
       
  2039     Status: Draft
       
  2040 
       
  2041 -------------------------------------------------------------------------------
       
  2042 */
       
  2043 CMenu* CMultipleBaseMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  2044     {
       
  2045 
       
  2046     MapKeyCode(aSelection);
       
  2047     
       
  2048     if ( iSetFinished )
       
  2049         {
       
  2050 
       
  2051         if ( ( aSelection == EKeyEnter  ) || ( aSelection == EKeyRightArrow ) )
       
  2052             {
       
  2053             // CMultipleBaseMenu relative position 
       
  2054             TInt pos = iFirst + iPosOnScreen - iMenuTotCount + iMenuCount;
       
  2055             if( pos  == EChangeAll )
       
  2056                 {
       
  2057                 TInt count = iTestCases.Count();    
       
  2058 
       
  2059                 // Change all                                       
       
  2060                 for (TInt i = 0; i < count; i++)
       
  2061                     {
       
  2062                     iSetState[i] = !iSetState[i];
       
  2063                     }
       
  2064 
       
  2065                 return this;
       
  2066                 }
       
  2067             else
       
  2068                 {
       
  2069                 // Normal item, change state...
       
  2070                 iSetState[ iFirst + iPosOnScreen - iMenuTotCount ] = 
       
  2071                     !iSetState[ iFirst + iPosOnScreen - iMenuTotCount ];
       
  2072                 return this;
       
  2073                 }            
       
  2074             
       
  2075             }
       
  2076 
       
  2077 		return CMenu::SelectL( aSelection, aContinue );
       
  2078         }
       
  2079     else
       
  2080         {
       
  2081 
       
  2082         switch ( aSelection )
       
  2083             {
       
  2084             case EKeyEnter:
       
  2085             case EKeyRightArrow:
       
  2086                 {
       
  2087                 if ( iOngoingCaseContainer != NULL )
       
  2088                     {
       
  2089                     iOngoingCaseContainer->UIEngineContainer().CancelTest();
       
  2090                     }
       
  2091                 iSetFinished = ETrue;
       
  2092                 iFirst = 0;
       
  2093                 iLast = 0;
       
  2094                 return this;
       
  2095                 }
       
  2096             default:
       
  2097                 return CMenu::SelectL( aSelection, aContinue );
       
  2098             }
       
  2099 
       
  2100 
       
  2101 
       
  2102         }
       
  2103 
       
  2104     }
       
  2105 
       
  2106 /*
       
  2107 -------------------------------------------------------------------------------
       
  2108 
       
  2109     Class: CMultipleBaseMenu
       
  2110 
       
  2111     Method: CheckIfAnyCaseIsSelected
       
  2112 
       
  2113     Description: Checks if any of testcases was selected in multiple selection menu
       
  2114 
       
  2115     Parameters: TInt aCount number of testcases in multiple selection menu
       
  2116 
       
  2117     Return Values: ETrue if any testcase was selected, EFalse if none of testcases was selected
       
  2118 
       
  2119     Errors/Exceptions: None
       
  2120 
       
  2121     Status: Proposal
       
  2122 
       
  2123 -------------------------------------------------------------------------------
       
  2124 */
       
  2125 TBool CMultipleBaseMenu::CheckIfAnyCaseIsSelected(TInt aCount)
       
  2126 {
       
  2127 	TInt currentPos = 0;
       
  2128 	for(; currentPos<aCount; currentPos++)	
       
  2129 	{
       
  2130 		//if any of testcases was selected then return true
       
  2131 		if (iSetState[currentPos])
       
  2132 			return ETrue;
       
  2133 	}
       
  2134 	//if none of testcases was selected then return false
       
  2135 	return EFalse;
       
  2136 }
       
  2137 
       
  2138 /*
       
  2139 -------------------------------------------------------------------------------
       
  2140 
       
  2141     Class: CMultipleBaseMenu
       
  2142 
       
  2143     Method: SignalL
       
  2144 
       
  2145     Description: Handle test case starts
       
  2146 
       
  2147     Parameters: CStartedTestCase* aContainer: in: CStartedTestCase container
       
  2148 
       
  2149     Return Values: None
       
  2150 
       
  2151     Errors/Exceptions: None
       
  2152 
       
  2153     Status: Approved
       
  2154 
       
  2155 -------------------------------------------------------------------------------
       
  2156 */
       
  2157 void CMultipleBaseMenu::SignalL( CStartedTestCase* /*aContainer*/ )
       
  2158     {
       
  2159 
       
  2160     TInt count = iTestCases.Count();
       
  2161     
       
  2162     TBool started = EFalse;
       
  2163     TInt index;
       
  2164     TInt err = KErrNone;
       
  2165 
       
  2166     // Counter to prevent infinite loop when cases can't be started at all
       
  2167     // when running cases in repeat mode.
       
  2168     TInt casesChecked = 0;
       
  2169 
       
  2170     // If cases are not aborted or not in last case and at least one test
       
  2171     // case was selected, start a new one
       
  2172     if ( !iSetFinished && iCurrentRunPos != count && CheckIfAnyCaseIsSelected(count) )
       
  2173         {
       
  2174         // Search next case from set and execute it.
       
  2175         while( iCurrentRunPos < count )
       
  2176             {
       
  2177             if ( iSetState[iCurrentRunPos] )
       
  2178                 {       
       
  2179                 err = iMain->UIStore().StartTestCase( 
       
  2180                     iTestCases[ iCurrentRunPos ], 
       
  2181                     index );
       
  2182 
       
  2183                 iCurrentRunPos++;
       
  2184                 casesChecked++;
       
  2185 
       
  2186                 // Go to start of list, if running cases in repeat mode. 
       
  2187                 // In other modes, just get out from the main loop
       
  2188                 if( ( iRunType == ERunRepeatSequential ) &&
       
  2189                     ( iCurrentRunPos >= count ) )
       
  2190                     {
       
  2191                     // Restart from first one on next time.
       
  2192                     iCurrentRunPos = 0;
       
  2193                     }
       
  2194 
       
  2195                 // Handle out of memory error separately, because there is
       
  2196                 // always new test case result display constructed when
       
  2197                 // starting case => Starting more new cases uses more memory
       
  2198                 // and it will not work, so stop starting new cases.
       
  2199                 if( err == KErrNoMemory )
       
  2200                     {
       
  2201                     iSetFinished = ETrue;
       
  2202                     break;
       
  2203                     }
       
  2204 
       
  2205                 // Get pointer to ongoing case in case that user wants to
       
  2206                 // cancel it.
       
  2207                 iOngoingCaseContainer = 
       
  2208                     &iMain->UIStore().StartedTestCaseL( index );
       
  2209 
       
  2210                 // Store pointer to this object to allow 
       
  2211                 // SignalL call when test case is completed
       
  2212                 iOngoingCaseContainer->iBackPtr = (TAny*)this;
       
  2213 
       
  2214                 if( err != KErrNone )
       
  2215                     {
       
  2216                     TFullTestResult result;  
       
  2217                     result.iTestResult.iResult = err;
       
  2218                     result.iTestResult.iResultDes.Copy( 
       
  2219                                             _L("Failed to start testcase") );
       
  2220                     // Prevent infinite loop in case, where
       
  2221                     // ERunRepeatSequential and ALL cases fail to start.
       
  2222                     if ( iRunType == ERunRepeatSequential && 
       
  2223                                             casesChecked == count )
       
  2224                         {
       
  2225                         // In this state, started = EFalse so final check
       
  2226                         // stops running
       
  2227                         break;
       
  2228                         }
       
  2229                     }
       
  2230                 else if( ( iRunType == ERunSequential ) ||
       
  2231                          ( iRunType == ERunRepeatSequential ) )
       
  2232                     {
       
  2233                     started = ETrue;
       
  2234                     break;
       
  2235                     }
       
  2236                 }
       
  2237             else 
       
  2238                 {
       
  2239                 iCurrentRunPos++;
       
  2240                 casesChecked++;
       
  2241 
       
  2242                 // Go to start of list, if running cases in repeat mode. 
       
  2243                 // In other modes, just get out from the main loop
       
  2244                 if( ( iRunType == ERunRepeatSequential ) &&
       
  2245                     ( iCurrentRunPos >= count ) )
       
  2246                     {
       
  2247                     // Restart from first one
       
  2248                     iCurrentRunPos = 0;
       
  2249                     }
       
  2250                 }
       
  2251             }
       
  2252         }
       
  2253 
       
  2254     if ( err == KErrNoMemory )
       
  2255     	{
       
  2256     	iMain->ExitWithNoMemoryErrorMessage();
       
  2257     	}
       
  2258     
       
  2259     // If nothing was selected, then mark set as finished. 
       
  2260     // Or running cases at same time, so all have been started.
       
  2261     if ( started == EFalse )
       
  2262         {
       
  2263         iFirst = 0;
       
  2264         iLast = 0;
       
  2265         iSetFinished = ETrue;
       
  2266         iCurrentRunPos = 0;
       
  2267         }
       
  2268 
       
  2269     }
       
  2270 
       
  2271 /*
       
  2272 -------------------------------------------------------------------------------
       
  2273 
       
  2274     Class: CMultipleBaseMenu
       
  2275 
       
  2276     Method: UpdateTestCases
       
  2277 
       
  2278     Description: 
       
  2279 
       
  2280     Parameters: 
       
  2281 
       
  2282     Return Values: 
       
  2283 
       
  2284     Errors/Exceptions: None
       
  2285 
       
  2286     Status: Draft
       
  2287 
       
  2288 -------------------------------------------------------------------------------
       
  2289 */
       
  2290 TInt CMultipleBaseMenu::UpdateTestCases()
       
  2291     {
       
  2292 
       
  2293     // Update test cases
       
  2294     iTestCases.Reset();
       
  2295     iSetState.Reset();
       
  2296     return iMain->UIStore().TestCases( iTestCases );
       
  2297             
       
  2298     }
       
  2299 
       
  2300 /*
       
  2301 -------------------------------------------------------------------------------
       
  2302 
       
  2303     CMultipleCaseMenu
       
  2304 
       
  2305     Method: NewL
       
  2306 
       
  2307     Description: Constructs new menu.
       
  2308 
       
  2309     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  2310                 CMenu* aParent            :in:      Parent menu
       
  2311                 const TDesC& aName        :in:      Menu name
       
  2312 
       
  2313     Return Values: CMenu*                           New menu
       
  2314 
       
  2315     Errors/Exceptions: Leaves if memory allocation fails
       
  2316                        Leaves if ConstructL leaves.
       
  2317 
       
  2318     Status: Draft
       
  2319 
       
  2320 -------------------------------------------------------------------------------
       
  2321 */
       
  2322 CMultipleCaseMenu* CMultipleCaseMenu::NewL( CConsoleMain* aConsole,
       
  2323                                             CMenu* aParent,
       
  2324                                             const TDesC& aName )
       
  2325     {
       
  2326 
       
  2327     CMultipleCaseMenu* self = new ( ELeave ) CMultipleCaseMenu();
       
  2328     CleanupStack::PushL( self );
       
  2329     self->ConstructL( aConsole, aParent, aName );
       
  2330     CleanupStack::Pop( self );
       
  2331     return self;
       
  2332     
       
  2333     }
       
  2334 
       
  2335 /*
       
  2336 -------------------------------------------------------------------------------
       
  2337 
       
  2338     CMultipleCaseMenu
       
  2339 
       
  2340     Method: CMultipleCaseMenu
       
  2341 
       
  2342     Description: Constructor
       
  2343 
       
  2344     Parameters: None
       
  2345 
       
  2346     Return Values: None
       
  2347 
       
  2348     Errors/Exceptions: None
       
  2349 
       
  2350     Status: Draft
       
  2351 
       
  2352 -------------------------------------------------------------------------------
       
  2353 */
       
  2354 CMultipleCaseMenu::CMultipleCaseMenu()    
       
  2355     {
       
  2356     
       
  2357     iMenuItemsCount = ERepeatRunSelection + 1;
       
  2358     iMenuItemsCount++; //Select all between already selected
       
  2359     iMenuTotCount += iMenuItemsCount;
       
  2360     
       
  2361     }   
       
  2362 
       
  2363 /*
       
  2364 -------------------------------------------------------------------------------
       
  2365 
       
  2366     CMultipleCaseMenu
       
  2367 
       
  2368     Method: ~CMultipleCaseMenu
       
  2369 
       
  2370     Description: Destructor
       
  2371 
       
  2372     Parameters: None
       
  2373 
       
  2374     Return Values: None
       
  2375 
       
  2376     Errors/Exceptions: None
       
  2377 
       
  2378     Status: Draft
       
  2379 
       
  2380 -------------------------------------------------------------------------------
       
  2381 */
       
  2382 CMultipleCaseMenu::~CMultipleCaseMenu()
       
  2383     {
       
  2384     }   
       
  2385 
       
  2386 /*
       
  2387 -------------------------------------------------------------------------------
       
  2388 
       
  2389     Class: CMultipleCaseMenu
       
  2390 
       
  2391     Method: ConstructL
       
  2392 
       
  2393     Description: Second level constructor.
       
  2394 
       
  2395     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  2396                 CMenu* aParent            :in:      Parent menu
       
  2397                 const TDesC& aName        :in:      Menu name
       
  2398 
       
  2399     Return Values: None
       
  2400 
       
  2401     Errors/Exceptions: None
       
  2402 
       
  2403     Status: Draft
       
  2404 
       
  2405 -------------------------------------------------------------------------------
       
  2406 */
       
  2407 void CMultipleCaseMenu::ConstructL( CConsoleMain* aConsole,
       
  2408                                CMenu* aParent,
       
  2409                                const TDesC& aName 
       
  2410                              )
       
  2411     {
       
  2412 
       
  2413     CCaseStartMenu::ConstructL( aConsole, aParent, aName );
       
  2414 
       
  2415     }
       
  2416 
       
  2417 /*
       
  2418 -------------------------------------------------------------------------------
       
  2419 
       
  2420     Class: CMultipleCaseMenu
       
  2421 
       
  2422     Method: StartRunningL
       
  2423 
       
  2424     Description: Start running multiple cases.
       
  2425 
       
  2426     Parameters: TRunType aRunType: in: Running type
       
  2427                 const TDesC& aModule: in: module name 
       
  2428                 const TDesC& aTestCaseFile: in: test case file name 
       
  2429 
       
  2430     Return Values: None
       
  2431 
       
  2432     Errors/Exceptions: Leaves on error
       
  2433 
       
  2434     Status: Draft
       
  2435 
       
  2436 -------------------------------------------------------------------------------
       
  2437 */
       
  2438 void CMultipleCaseMenu::StartRunningL( TRunType aRunType, 
       
  2439                                        const TDesC& aModule, 
       
  2440                                        const TDesC& aTestCaseFile )
       
  2441     {
       
  2442     
       
  2443     // Update test cases
       
  2444     iTestCases.Reset();
       
  2445     iSetState.Reset();
       
  2446     User::LeaveIfError( 
       
  2447         iMain->UIStore().TestCases( iTestCases, aModule, aTestCaseFile ) );
       
  2448     
       
  2449     // Select all for running
       
  2450     TInt count = iTestCases.Count();
       
  2451     for( TInt j=0; j<count; j++ )
       
  2452         {
       
  2453         User::LeaveIfError( iSetState.Append(ETrue) );
       
  2454         }
       
  2455         
       
  2456     // Start running
       
  2457     iCurrentRunPos = 0;
       
  2458     iSetFinished = EFalse;
       
  2459     iRunType = aRunType;
       
  2460     SignalL ( NULL );
       
  2461 
       
  2462     }
       
  2463 
       
  2464 /*
       
  2465 -------------------------------------------------------------------------------
       
  2466 
       
  2467     Class: CMultipleCaseMenu
       
  2468 
       
  2469     Method: ItemText
       
  2470 
       
  2471     Description: Returns menu item text
       
  2472 
       
  2473     Parameters: const TInt                :in:      Menu index
       
  2474 
       
  2475     Return Values: const TDesC&                     Menu line text
       
  2476 
       
  2477     Errors/Exceptions: None
       
  2478 
       
  2479     Status: Draft
       
  2480 
       
  2481 -------------------------------------------------------------------------------
       
  2482 */
       
  2483 TInt CMultipleCaseMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  2484     {
       
  2485 
       
  2486     if ( iSetFinished )
       
  2487         {
       
  2488         if( aArray.Append( KRunSequentially ) != KErrNone )
       
  2489             {
       
  2490             return KErrNoMemory;
       
  2491             }
       
  2492         if( aArray.Append( KRunParallel ) != KErrNone )
       
  2493             {
       
  2494             return KErrNoMemory;
       
  2495             }
       
  2496         if( aArray.Append( KRepeatRunSequentially ) != KErrNone )
       
  2497             {
       
  2498             return KErrNoMemory;
       
  2499             }
       
  2500         if(aArray.Append(KSelectFromTo) != KErrNone)
       
  2501             {
       
  2502             return KErrNoMemory;
       
  2503             }
       
  2504         }
       
  2505 
       
  2506     TInt ret = CMultipleBaseMenu::ItemTexts(aArray);
       
  2507     if(ret != KErrNone)
       
  2508         {
       
  2509         return ret;
       
  2510         }
       
  2511     
       
  2512     return KErrNone;    
       
  2513     }
       
  2514 
       
  2515 /*
       
  2516 -------------------------------------------------------------------------------
       
  2517 
       
  2518     Class: CMultipleCaseMenu
       
  2519 
       
  2520     Method: SelectL
       
  2521 
       
  2522     Description: Process keypresses in menu. Handle enter and right arrow here,
       
  2523     others in CMenu::SelectL.
       
  2524 
       
  2525     Parameters: TKeyCode aSelection       :in:      Key
       
  2526                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  2527 
       
  2528     Return Values: CMenu*                           New menu
       
  2529 
       
  2530     Errors/Exceptions: None
       
  2531 
       
  2532     Status: Draft
       
  2533 
       
  2534 -------------------------------------------------------------------------------
       
  2535 */
       
  2536 CMenu* CMultipleCaseMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  2537     {
       
  2538 
       
  2539     MapKeyCode(aSelection);
       
  2540     
       
  2541     if ( iSetFinished )
       
  2542         {
       
  2543         switch ( aSelection )
       
  2544             {
       
  2545             case EKeyEnter:
       
  2546             case EKeyRightArrow:
       
  2547                 {
       
  2548 
       
  2549                 if ( iFirst + iPosOnScreen == ERunSelection )
       
  2550                     {
       
  2551                     // Start the first one
       
  2552                     iCurrentRunPos = 0;
       
  2553                     iSetFinished = EFalse;
       
  2554                     iRunType = ERunSequential;
       
  2555                     SignalL ( NULL );
       
  2556 
       
  2557                     return iParent;
       
  2558                     }
       
  2559                 else if ( iFirst + iPosOnScreen == ERunSelectionParaller )
       
  2560                     {
       
  2561                     // Start the first one
       
  2562                     iCurrentRunPos = 0;
       
  2563                     iSetFinished = EFalse;
       
  2564                     iRunType = ERunParallel;
       
  2565                     SignalL ( NULL );
       
  2566 
       
  2567                     return iParent;
       
  2568                     }
       
  2569                 else if ( iFirst + iPosOnScreen == ERepeatRunSelection )
       
  2570                     {
       
  2571                     // Start the first one
       
  2572                     iCurrentRunPos = 0;
       
  2573                     iSetFinished = EFalse;
       
  2574                     iRunType = ERunRepeatSequential;
       
  2575                     SignalL ( NULL );
       
  2576 
       
  2577                     return iParent;
       
  2578                     }
       
  2579                 else if(iFirst + iPosOnScreen == ESelectFromTo)
       
  2580                     {
       
  2581                     TInt count = iTestCases.Count();
       
  2582                     TInt indexFirst = count;
       
  2583                     TInt indexLast = count - 1;
       
  2584                     TInt i;
       
  2585                     
       
  2586                     // Find first test case which is set
       
  2587                     for(i = 0; i < count; i++)
       
  2588                         {
       
  2589                         if(iSetState[i])
       
  2590                             {
       
  2591                             indexFirst = i;
       
  2592                             break;
       
  2593                             }
       
  2594                         }
       
  2595                     
       
  2596                     // Find last test case which is set
       
  2597                     if(indexFirst < count)
       
  2598                         {
       
  2599                         for(i = count - 1; i > indexFirst; i--)
       
  2600                             {
       
  2601                             if(iSetState[i])
       
  2602                                 {
       
  2603                                 indexLast = i;
       
  2604                                 break;
       
  2605                                 }
       
  2606                             }
       
  2607                         
       
  2608                         // Set test cases between first and last
       
  2609                         for(i = indexFirst; i <= indexLast; i++)
       
  2610                             {
       
  2611                             iSetState[i] = ETrue;
       
  2612                             }
       
  2613                         }
       
  2614 
       
  2615                     return this;
       
  2616                     }
       
  2617                 }
       
  2618                 break;
       
  2619             default:
       
  2620                 break;
       
  2621             }
       
  2622         }   
       
  2623         
       
  2624     return CMultipleBaseMenu::SelectL( aSelection, aContinue );
       
  2625         
       
  2626     }
       
  2627     
       
  2628 /*
       
  2629 -------------------------------------------------------------------------------
       
  2630 
       
  2631     Class: CCaseMenu
       
  2632 
       
  2633     Method: NewL
       
  2634 
       
  2635     Description: Constructs new menu.
       
  2636 
       
  2637     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  2638                 CMenu* aParent            :in:      Parent menu
       
  2639                 const TDesC& aName        :in:      Menu name
       
  2640                 TCaseState aType          :in:      Case state
       
  2641 
       
  2642     Return Values: CMenu*                           New menu
       
  2643 
       
  2644     Errors/Exceptions: Leaves if memory allocation fails
       
  2645                        Leaves if ConstructL leaves.
       
  2646 
       
  2647     Status: Draft
       
  2648 
       
  2649 -------------------------------------------------------------------------------
       
  2650 */
       
  2651 CCaseMenu* CCaseMenu::NewL( CConsoleMain* aConsole, 
       
  2652                             CMenu* aParent, 
       
  2653                             const TDesC& aName, 
       
  2654                             TInt aType )
       
  2655     {
       
  2656 
       
  2657     CCaseMenu* self = new ( ELeave ) CCaseMenu();
       
  2658     CleanupStack::PushL( self );
       
  2659     self->ConstructL( aConsole, aParent, aName, aType );
       
  2660     CleanupStack::Pop( self );
       
  2661     return self;
       
  2662 
       
  2663     }
       
  2664 
       
  2665 /*
       
  2666 -------------------------------------------------------------------------------
       
  2667 
       
  2668     Class: CCaseMenu
       
  2669 
       
  2670     Method: ConstructL
       
  2671 
       
  2672     Description: Second level constructor.
       
  2673 
       
  2674     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  2675                 CMenu* aParent            :in:      Parent menu
       
  2676                 const TDesC& aName        :in:      Menu name
       
  2677                 TCaseState aType          :in:      Case state
       
  2678 
       
  2679     Return Values: None
       
  2680 
       
  2681     Errors/Exceptions: Leaves if parent class ConstructL leaves
       
  2682                        Leaves if memory allocation fails
       
  2683                        Leaves if CCaseOperation menu NewL leaves
       
  2684                        Leaves if UpcateCaseListL leaves
       
  2685 
       
  2686     Status: Draft
       
  2687 
       
  2688 -------------------------------------------------------------------------------
       
  2689 */
       
  2690 void CCaseMenu::ConstructL( CConsoleMain* aConsole, 
       
  2691                             CMenu* aParent, 
       
  2692                             const TDesC& aName, 
       
  2693                             TInt aType
       
  2694                           )
       
  2695     {
       
  2696 
       
  2697     CMenu::ConstructL( aConsole, aParent, aName);
       
  2698     iType = aType;
       
  2699 
       
  2700     }
       
  2701 
       
  2702 
       
  2703 
       
  2704 /*
       
  2705 -------------------------------------------------------------------------------
       
  2706 
       
  2707     Class: CCaseMenu
       
  2708 
       
  2709     Method: ~CCaseMenu
       
  2710 
       
  2711     Description: Destructor
       
  2712 
       
  2713     Parameters: None
       
  2714 
       
  2715     Return Values: None
       
  2716 
       
  2717     Errors/Exceptions: None
       
  2718 
       
  2719     Status: Draft
       
  2720     
       
  2721 -------------------------------------------------------------------------------
       
  2722 */
       
  2723 CCaseMenu::~CCaseMenu()
       
  2724     {
       
  2725 
       
  2726     delete iCaseOperationMenu;
       
  2727     iCaseOperationMenu = 0;
       
  2728     
       
  2729     iTestCases.Close();
       
  2730 
       
  2731     }
       
  2732 
       
  2733 
       
  2734 /*
       
  2735 -------------------------------------------------------------------------------
       
  2736 
       
  2737     Class: CCaseMenu
       
  2738 
       
  2739     Method: ItemText
       
  2740 
       
  2741     Description: Returns menu item text
       
  2742 
       
  2743     Parameters: const TInt                :in:      Menu index
       
  2744 
       
  2745     Return Values: const TDesC&                     Menu line text
       
  2746 
       
  2747     Errors/Exceptions: None
       
  2748 
       
  2749     Status: Draft
       
  2750 
       
  2751 -------------------------------------------------------------------------------
       
  2752 */
       
  2753 TInt CCaseMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  2754     {
       
  2755     
       
  2756     iTestCases.Reset();
       
  2757     
       
  2758     TInt ret = iMain->UIStore().StartedTestCases( iTestCases, iType );
       
  2759     if ( ret != KErrNone )
       
  2760     	{
       
  2761     	return ret;
       
  2762     	}
       
  2763 
       
  2764     TInt count = iTestCases.Count();
       
  2765     for( TInt i=0; i<count; i++ )
       
  2766         {
       
  2767         if( aArray.Append( iTestCases[i].TestInfo().TestCaseTitle() ) != KErrNone )
       
  2768             {
       
  2769             return KErrNoMemory;
       
  2770             }
       
  2771         }
       
  2772 
       
  2773     return KErrNone;
       
  2774     }
       
  2775 
       
  2776 /*
       
  2777 -------------------------------------------------------------------------------
       
  2778     Class: CCaseMenu
       
  2779 
       
  2780     Method: AppendBefore
       
  2781 
       
  2782     Description: Append text before line.
       
  2783 
       
  2784     Parameters: TInt aLine: in: line number
       
  2785                 TDes& aLine: in: line text
       
  2786 
       
  2787     Return Values: None
       
  2788 
       
  2789     Errors/Exceptions: None
       
  2790 
       
  2791     Status: Draft
       
  2792 
       
  2793 -------------------------------------------------------------------------------
       
  2794 */
       
  2795 void CCaseMenu::AppendBefore(TInt aLineNum, TDes& aLine)
       
  2796     {
       
  2797     CMenu::AppendBefore(aLineNum, aLine);
       
  2798 
       
  2799     //START of --Add number to the test case title--
       
  2800     //First check how much space we need
       
  2801     TInt additionalSpace = 0;
       
  2802     TInt currentCount = aLineNum + 1;
       
  2803 
       
  2804     if(currentCount >= 10000) additionalSpace = 10; //f.e. "10157521. "
       
  2805     else if(currentCount >= 1000) additionalSpace = 6; //f.e. "1157. "
       
  2806     else if(currentCount >= 100) additionalSpace = 5; //f.e. "101. "
       
  2807     else if(currentCount >= 10) additionalSpace = 4; //f.e. "15. "
       
  2808     else additionalSpace = 3; //f.e. "1. "
       
  2809 
       
  2810  //Create descriptor, add content to it, and finally append to line
       
  2811     TBuf<20> num;
       
  2812 
       
  2813     if(iTestCases[aLineNum].Status() == CUIStoreIf::EStatusRunning )
       
  2814  	   {
       
  2815     if( iTestCases[aLineNum].UIEngineContainer().State() == CUIEngineContainer::EPaused)
       
  2816      	{
       
  2817      	  //If not enough space, return
       
  2818      	if((aLine.MaxLength() - aLine.Length()) < additionalSpace + 4)
       
  2819      	     {
       
  2820      	     return;
       
  2821      	     }
       
  2822      		num.Format(_L("%d.(P) "), currentCount);
       
  2823      	}
       
  2824      else
       
  2825      	{
       
  2826         //If not enough space, return
       
  2827      	if((aLine.MaxLength() - aLine.Length()) < additionalSpace)
       
  2828      		{
       
  2829      	  	return;
       
  2830      	     }     		  			
       
  2831      	num.Format(_L("%d."), currentCount);
       
  2832      	}
       
  2833  	   }
       
  2834     aLine.Append(num);
       
  2835     }
       
  2836     //END of --Add number to test case title--
       
  2837     
       
  2838 
       
  2839 /*
       
  2840 -------------------------------------------------------------------------------
       
  2841 
       
  2842     Class: CCaseMenu
       
  2843 
       
  2844     Method: SelectL
       
  2845 
       
  2846     Description: Process keypresses in menu. Handle Enter and Right Arrow
       
  2847     here, other will be handled in CMenu::SelectL
       
  2848 
       
  2849     Parameters: TKeyCode aSelection       :in:      Key
       
  2850                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  2851 
       
  2852     Return Values: CMenu*                           New menu
       
  2853 
       
  2854     Errors/Exceptions: None
       
  2855 
       
  2856     Status: Draft
       
  2857 
       
  2858 -------------------------------------------------------------------------------
       
  2859 */
       
  2860 CMenu* CCaseMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  2861     {
       
  2862 
       
  2863     MapKeyCode(aSelection);
       
  2864     
       
  2865     switch (aSelection)
       
  2866         {
       
  2867         case EKeyEnter:
       
  2868         case EKeyRightArrow:
       
  2869             {
       
  2870             if ( iFirst + iPosOnScreen < iTestCases.Count() )
       
  2871                 {
       
  2872                 delete iCaseOperationMenu;
       
  2873                 iCaseOperationMenu = 0;
       
  2874                 iCaseOperationMenu = CCaseOperationMenu::NewL( 
       
  2875                     iMain, 
       
  2876                     this, 
       
  2877                     iTestCases[iFirst + iPosOnScreen].TestInfo().TestCaseTitle(), 
       
  2878                     &iTestCases[iFirst + iPosOnScreen] );   
       
  2879 
       
  2880                 return iCaseOperationMenu;
       
  2881                 }
       
  2882             }
       
  2883             return this;
       
  2884         default:
       
  2885             // Let the parent class handle rest
       
  2886             return CMenu::SelectL(aSelection, aContinue);
       
  2887         }
       
  2888     
       
  2889     }
       
  2890 
       
  2891 
       
  2892 /*
       
  2893 -------------------------------------------------------------------------------
       
  2894 
       
  2895     Class: CCaseOperationMenu
       
  2896 
       
  2897     Method: NewL
       
  2898 
       
  2899     Description: Constructs new menu.
       
  2900 
       
  2901     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  2902                 CMenu* aParent            :in:      Parent menu
       
  2903                 const TDesC& aName        :in:      Menu name
       
  2904                 CStartedTestCase* aCaseContainer:in: Case container
       
  2905 
       
  2906     Return Values: CMenu*                           New menu
       
  2907 
       
  2908     Errors/Exceptions: Leaves if memory allocation fails
       
  2909                        Leaves if ConstructL leaves.
       
  2910 
       
  2911     Status: Draft
       
  2912 
       
  2913 -------------------------------------------------------------------------------
       
  2914 */
       
  2915 CCaseOperationMenu* CCaseOperationMenu::NewL( CConsoleMain* aConsole,
       
  2916                                  CMenu* aParent,
       
  2917                                  const TDesC& aName,
       
  2918                                  const CStartedTestCase* aCaseContainer
       
  2919                                )
       
  2920     {
       
  2921 
       
  2922     CCaseOperationMenu* self = new ( ELeave ) CCaseOperationMenu();
       
  2923     CleanupStack::PushL( self );
       
  2924     self->ConstructL( aConsole, aParent, aName, aCaseContainer );
       
  2925     CleanupStack::Pop( self );
       
  2926     return self;
       
  2927     
       
  2928     }
       
  2929 
       
  2930 /*
       
  2931 -------------------------------------------------------------------------------
       
  2932 
       
  2933     Class: CCaseOperationMenu
       
  2934 
       
  2935     Method: ConstructL
       
  2936 
       
  2937     Description: Second level constructor.
       
  2938 
       
  2939     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  2940                 CMenu* aParent            :in:      Parent menu
       
  2941                 const TDesC& aName        :in:      Menu name
       
  2942                 CStartedTestCase* aCaseContainer:in: Case container
       
  2943 
       
  2944     Return Values: None
       
  2945 
       
  2946     Errors/Exceptions: None
       
  2947 
       
  2948     Status: Draft
       
  2949 
       
  2950 -------------------------------------------------------------------------------
       
  2951 */
       
  2952 void CCaseOperationMenu::ConstructL( CConsoleMain* aConsole,
       
  2953                                      CMenu* aParent,
       
  2954                                      const TDesC& aName,
       
  2955                                      const CStartedTestCase* aCaseContainer
       
  2956                                    )
       
  2957     {
       
  2958 
       
  2959     CMenu::ConstructL( aConsole, aParent, aName); 
       
  2960     iCaseContainer = aCaseContainer;
       
  2961     
       
  2962     // Indicate that this menu contains prints, update when needed
       
  2963     iType = CUIStoreIf::EStatusExecuted;
       
  2964     
       
  2965     }
       
  2966 
       
  2967 
       
  2968 /*
       
  2969 -------------------------------------------------------------------------------
       
  2970 
       
  2971     Class: CMenu
       
  2972 
       
  2973     Method: ~CMenu
       
  2974 
       
  2975     Description: Destructor
       
  2976 
       
  2977     Parameters: None
       
  2978 
       
  2979     Return Values: None
       
  2980 
       
  2981     Errors/Exceptions: None
       
  2982 
       
  2983     Status: Draft
       
  2984     
       
  2985 -------------------------------------------------------------------------------
       
  2986 */
       
  2987 CCaseOperationMenu::~CCaseOperationMenu()
       
  2988     {
       
  2989     delete iView;
       
  2990     iView = 0;
       
  2991     }
       
  2992 
       
  2993 /*
       
  2994 -------------------------------------------------------------------------------
       
  2995 
       
  2996     Class: CCaseOperationMenu
       
  2997 
       
  2998     Method: ItemText
       
  2999 
       
  3000     Description: Returns menu item text
       
  3001 
       
  3002     Parameters: const TInt                :in:      Menu index
       
  3003 
       
  3004     Return Values: const TDesC&                     Menu line text
       
  3005 
       
  3006     Errors/Exceptions: None
       
  3007 
       
  3008     Status: Draft
       
  3009 
       
  3010 -------------------------------------------------------------------------------
       
  3011 */
       
  3012 TInt CCaseOperationMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  3013     {
       
  3014     
       
  3015     if( iCaseContainer->Status() & CUIStoreIf::EStatusRunning )
       
  3016         {
       
  3017         if( aArray.Append( KOutputViewDes ) != KErrNone )
       
  3018             {
       
  3019             return KErrNoMemory; 
       
  3020             }
       
  3021                 
       
  3022         // Set resume/pause text
       
  3023         if( iCaseContainer->UIEngineContainer().State() == 
       
  3024             CUIEngineContainer::EPaused )
       
  3025             {
       
  3026             if( aArray.Append( KResumeCaseDes ) != KErrNone )
       
  3027                 {
       
  3028                 return KErrNoMemory; 
       
  3029                 }
       
  3030             }
       
  3031         else
       
  3032             {
       
  3033             if( aArray.Append( KPauseCaseDes ) != KErrNone )
       
  3034                 {
       
  3035                 return KErrNoMemory; 
       
  3036                 }
       
  3037             }
       
  3038         if( aArray.Append( KAbortCaseDes ) != KErrNone )
       
  3039             {
       
  3040             return KErrNoMemory; 
       
  3041             }
       
  3042         }
       
  3043     else
       
  3044         {
       
  3045         if(aArray.Append(KRestartCaseDes) != KErrNone)
       
  3046             {
       
  3047             return KErrNoMemory; 
       
  3048             }
       
  3049         if( aArray.Append( KOutputViewDes ) != KErrNone )
       
  3050             {
       
  3051             return KErrNoMemory; 
       
  3052             }
       
  3053         }
       
  3054 
       
  3055     return KErrNone;
       
  3056 
       
  3057     }
       
  3058 
       
  3059 /*
       
  3060 -------------------------------------------------------------------------------
       
  3061     Class: CMenu
       
  3062 
       
  3063     Method: PrintMenuL
       
  3064 
       
  3065     Description: Prints the menu and test case specific information after that.
       
  3066 
       
  3067     Parameters: None
       
  3068 
       
  3069     Return Values: None
       
  3070 
       
  3071     Errors/Exceptions: Leaves if FormatL leaves
       
  3072 
       
  3073     Status: Draft
       
  3074     
       
  3075 -------------------------------------------------------------------------------
       
  3076 */
       
  3077 void CCaseOperationMenu::PrintMenuL( TUpdateType  aType )
       
  3078     {
       
  3079 
       
  3080     // Print menu
       
  3081     CMenu::PrintMenuL( aType );
       
  3082     
       
  3083     // Print the result description + result code
       
  3084     // If case is finished, print also result string
       
  3085     TInt state = iCaseContainer->Status();
       
  3086     if  ( ! ( state & CUIStoreIf::EStatusRunning ) )
       
  3087         {        
       
  3088 
       
  3089         TName resultLine;
       
  3090         
       
  3091         Print (_L(""));
       
  3092         resultLine.Append(_L("Result info: ") );
       
  3093 
       
  3094         if( state & CUIStoreIf::EStatusPassed )
       
  3095             {
       
  3096             resultLine.Append( _L("Passed" ) );
       
  3097             } 
       
  3098         else if( state & CUIStoreIf::EStatusFailed )
       
  3099             {
       
  3100             resultLine.Append( _L("Failed" ) );
       
  3101             } 
       
  3102         else if( state & CUIStoreIf::EStatusAborted )
       
  3103             {
       
  3104             resultLine.Append( _L("Aborted" ) );
       
  3105             } 
       
  3106         else if( state & CUIStoreIf::EStatusCrashed )
       
  3107             {
       
  3108             resultLine.Append( _L("Crashed" ) );
       
  3109             }
       
  3110         PrintMulti( resultLine );
       
  3111         resultLine.Zero();             
       
  3112 
       
  3113         // Print test results
       
  3114         if( !( ( state & CUIStoreIf::EStatusAborted ) || 
       
  3115                ( state & CUIStoreIf::EStatusCrashed ) || 
       
  3116                ( state & CUIStoreIf::EStatusPassed ) ) )
       
  3117             {
       
  3118 
       
  3119             resultLine.Format(_L("Result code %d"), 
       
  3120                 iCaseContainer->Result().iTestResult.iResult );
       
  3121             PrintMulti ( resultLine );            
       
  3122             }
       
  3123 
       
  3124         if( iCaseContainer->Result().iCaseExecutionResultType == 
       
  3125             TFullTestResult::ECaseErrorFromModule )
       
  3126             {
       
  3127             PrintMulti ( _L("Error from RunTestCase():"));
       
  3128             }
       
  3129 
       
  3130         // Print result descriptor if that is available
       
  3131         const TDesC& des = iCaseContainer->Result().iTestResult.iResultDes;
       
  3132         if ( des.Length() >0 )
       
  3133             {
       
  3134             PrintMulti(des);
       
  3135             }
       
  3136 
       
  3137         // Print abort code if that is available
       
  3138         if( ( state & CUIStoreIf::EStatusAborted ) ||
       
  3139             ( state & CUIStoreIf::EStatusCrashed ) )
       
  3140             {
       
  3141             // Print abort type, if that is available
       
  3142             TFullTestResult::TCaseExecutionResult res = 
       
  3143                 iCaseContainer->Result().iCaseExecutionResultType;
       
  3144             
       
  3145             if ( res == TFullTestResult::ECaseLeave ||
       
  3146                  res == TFullTestResult::ECasePanic ||
       
  3147                  res == TFullTestResult::ECaseException || 
       
  3148                  res == TFullTestResult::ECaseErrorFromModule ||
       
  3149                  res == TFullTestResult::ECaseSuicided )
       
  3150                 {
       
  3151                 TInt code = iCaseContainer->Result().iCaseExecutionResultCode;
       
  3152                 resultLine.Format(_L("Code %d (0x%x)"), code, code );
       
  3153                 PrintMulti ( resultLine );
       
  3154                 }
       
  3155             }
       
  3156 
       
  3157         // Print start and end times
       
  3158         const TInt KTimeFieldLength = 30;
       
  3159         TBuf<KTimeFieldLength> time;
       
  3160         _LIT(KDateString,"%-B%:0%J%:1%T%:2%S%.%*C4%:3%+B");
       
  3161 
       
  3162         resultLine = _L("Started:");
       
  3163         iCaseContainer->Result().iStartTime.FormatL(time,KDateString);
       
  3164         resultLine.Append(time);
       
  3165         PrintMulti (resultLine);
       
  3166 
       
  3167         resultLine = _L("Completed:");
       
  3168         iCaseContainer->Result().iEndTime.FormatL(time,KDateString);
       
  3169         
       
  3170         resultLine.Append(time);
       
  3171         PrintMulti (resultLine);
       
  3172 
       
  3173         }
       
  3174 
       
  3175     }
       
  3176 
       
  3177 /*
       
  3178 -------------------------------------------------------------------------------
       
  3179 
       
  3180     Class: CCaseOperationMenu
       
  3181 
       
  3182     Method: SelectL
       
  3183 
       
  3184     Description: Process keypresses in menu. Handle Enter and right arrow
       
  3185     here, others are handled in parent menu.
       
  3186 
       
  3187     Parameters: TKeyCode aSelection       :in:      Key
       
  3188                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  3189 
       
  3190     Return Values: CMenu*                           New menu
       
  3191 
       
  3192     Errors/Exceptions: None
       
  3193 
       
  3194     Status: Draft
       
  3195 
       
  3196 -------------------------------------------------------------------------------
       
  3197 */
       
  3198 CMenu* CCaseOperationMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  3199     {   
       
  3200 
       
  3201     MapKeyCode(aSelection);
       
  3202     
       
  3203     if (aSelection == EKeyEnter || aSelection == EKeyRightArrow )
       
  3204         {        
       
  3205         // restartOptionModifier is used because when test case is running
       
  3206         // restart option is not available (and visible) and that's why
       
  3207         // we need to modify switch by 1.
       
  3208         // When test case is finished, restart option becomes available
       
  3209         // and is put at the first place.
       
  3210         TInt restartOptionModifier = 0;
       
  3211         if(iCaseContainer->Status() & CUIStoreIf::EStatusRunning)
       
  3212             restartOptionModifier = 1;
       
  3213         
       
  3214         switch (iPosOnScreen + iFirst + restartOptionModifier)
       
  3215         {
       
  3216         case ERestartCase:
       
  3217             {
       
  3218             TInt index;
       
  3219             User::LeaveIfError(iMain->UIStore().StartTestCase(iCaseContainer->TestInfo(), index));
       
  3220             // Create output screen
       
  3221             CMenu* m = iMain->GetMainMenu()->CreateOutputViewL(iParent);
       
  3222             return m;
       
  3223             }
       
  3224         case EOutputView:
       
  3225             {
       
  3226             delete iView;
       
  3227             iView = 0;
       
  3228             iView = CCaseExecutionView::NewL( 
       
  3229                 iMain, 
       
  3230                 this, 
       
  3231                 iCaseContainer->TestInfo().TestCaseTitle(), 
       
  3232                 iCaseContainer );
       
  3233 
       
  3234             return iView;
       
  3235             }
       
  3236 
       
  3237         case EPauseResume:
       
  3238 
       
  3239             if( iCaseContainer->UIEngineContainer().State() == 
       
  3240                 CUIEngineContainer::ERunning )
       
  3241                 {    
       
  3242                 // Pausing a running case
       
  3243                 iCaseContainer->UIEngineContainer().PauseTest();
       
  3244 
       
  3245                 }
       
  3246             else if( iCaseContainer->UIEngineContainer().State() == 
       
  3247                      CUIEngineContainer::EPaused )
       
  3248                 {
       
  3249                 // Resuming a paused case
       
  3250                 iCaseContainer->UIEngineContainer().ResumeTest();
       
  3251 
       
  3252                 }
       
  3253             // No other possibilities
       
  3254             return this;
       
  3255 
       
  3256         case EAbortCase:
       
  3257             iCaseContainer->UIEngineContainer().CancelTest();
       
  3258             break;
       
  3259 
       
  3260         }
       
  3261         
       
  3262         return this;
       
  3263         }
       
  3264     else
       
  3265         {
       
  3266         return CMenu::SelectL(aSelection, aContinue);
       
  3267         }
       
  3268         
       
  3269     }
       
  3270 
       
  3271 
       
  3272 
       
  3273 /*
       
  3274 -------------------------------------------------------------------------------
       
  3275 
       
  3276     Class: CCaseExecutionView
       
  3277 
       
  3278     Method: NewL
       
  3279 
       
  3280     Description: Constructs new menu.
       
  3281 
       
  3282     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  3283                 CMenu* aParent            :in:      Parent menu
       
  3284                 const TDesC& aName        :in:      Menu name
       
  3285                 CStartedTestCase* aCase :in:      Case container
       
  3286 
       
  3287     Return Values: CMenu*                           New menu
       
  3288 
       
  3289     Errors/Exceptions: Leaves if memory allocation fails
       
  3290                        Leaves if ConstructL leaves.
       
  3291 
       
  3292     Status: Draft
       
  3293 
       
  3294 -------------------------------------------------------------------------------
       
  3295 */
       
  3296 CCaseExecutionView* CCaseExecutionView::NewL( CConsoleMain* aConsole,
       
  3297                                               CMenu* aParent,
       
  3298                                               const TDesC& aName,
       
  3299                                               const CStartedTestCase* aCase )
       
  3300     {
       
  3301 
       
  3302     CCaseExecutionView* self = new ( ELeave ) CCaseExecutionView();
       
  3303     CleanupStack::PushL( self );
       
  3304     self->ConstructL( aConsole, aParent, aName, aCase );
       
  3305     CleanupStack::Pop( self );
       
  3306     return self;
       
  3307     
       
  3308     }
       
  3309 
       
  3310 /*
       
  3311 -------------------------------------------------------------------------------
       
  3312 
       
  3313     Class: CCaseExecutionView
       
  3314 
       
  3315     Method: ConstructL
       
  3316 
       
  3317     Description: Second level constructor.
       
  3318 
       
  3319     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  3320                 CMenu* aParent            :in:      Parent menu
       
  3321                 const TDesC& aName        :in:      Menu name
       
  3322                 CStartedTestCase* aCase :in:      Case container
       
  3323 
       
  3324     Return Values: None
       
  3325 
       
  3326     Errors/Exceptions: Leaves if parent class ConstructL leaves
       
  3327 
       
  3328     Status: Draft
       
  3329 
       
  3330 -------------------------------------------------------------------------------
       
  3331 */
       
  3332 void CCaseExecutionView::ConstructL( CConsoleMain* aConsole,
       
  3333                                      CMenu* aParent,
       
  3334                                      const TDesC& aName,
       
  3335                                      const CStartedTestCase* aCase
       
  3336                                     )
       
  3337     {
       
  3338 
       
  3339     CMenu::ConstructL( aConsole, aParent, aName );
       
  3340 
       
  3341     iCase = aCase;
       
  3342     
       
  3343     // Indicate that this menu contains prints, update when needed
       
  3344     iType = CUIStoreIf::EPrintUpdate;
       
  3345 
       
  3346     iLine = 0;
       
  3347 
       
  3348     }
       
  3349 
       
  3350 /*
       
  3351 -------------------------------------------------------------------------------
       
  3352 
       
  3353     CCaseExecutionView
       
  3354 
       
  3355     Method: ~CCaseExecutionView
       
  3356 
       
  3357     Description: Destructor
       
  3358 
       
  3359     Parameters: None
       
  3360 
       
  3361     Return Values: None
       
  3362 
       
  3363     Errors/Exceptions: None
       
  3364 
       
  3365     Status: Draft
       
  3366 
       
  3367 -------------------------------------------------------------------------------
       
  3368 */
       
  3369 CCaseExecutionView::~CCaseExecutionView()
       
  3370     {
       
  3371     delete iLineTextBuf;
       
  3372 
       
  3373     }
       
  3374 
       
  3375 /*
       
  3376 -------------------------------------------------------------------------------
       
  3377     Class: CMenu
       
  3378 
       
  3379     Method: PrintMenuL
       
  3380 
       
  3381     Description: Prints the menu. Show the test status and the test case
       
  3382     print statements.
       
  3383 
       
  3384     Parameters: None
       
  3385 
       
  3386     Return Values: None
       
  3387 
       
  3388     Errors/Exceptions: None
       
  3389 
       
  3390     Status: Draft
       
  3391 
       
  3392 -------------------------------------------------------------------------------
       
  3393 */
       
  3394 void CCaseExecutionView::PrintMenuL( TUpdateType  /*aType*/ )
       
  3395     {
       
  3396     
       
  3397     if( iShowLine )
       
  3398         {
       
  3399         // User want to see whole line 
       
  3400         iConsole->ClearScreen();
       
  3401         this->PrintMulti( iLineTextBuf->Des() );
       
  3402         return;
       
  3403         }
       
  3404 
       
  3405     // Print the status
       
  3406     TName tmp;
       
  3407     TInt state = iCase->Status();
       
  3408     if( state & CUIStoreIf::EStatusRunning )
       
  3409         {
       
  3410         if( iCase->UIEngineContainer().State() == 
       
  3411             CUIEngineContainer::EPaused )
       
  3412             {
       
  3413             tmp = _L("Paused");
       
  3414             }
       
  3415         else
       
  3416             {
       
  3417             tmp = _L("Running");
       
  3418             }
       
  3419         }
       
  3420     else if( state & CUIStoreIf::EStatusPassed )
       
  3421         {
       
  3422         tmp = _L("Passed");
       
  3423         }
       
  3424     else if( state & CUIStoreIf::EStatusFailed )
       
  3425         {
       
  3426         tmp = _L("Failed");
       
  3427         }
       
  3428     else if( state & CUIStoreIf::EStatusAborted )
       
  3429         {
       
  3430         tmp = _L("Aborted");
       
  3431         }
       
  3432     else if( state & CUIStoreIf::EStatusCrashed )
       
  3433         {
       
  3434         tmp = _L("Aborted");
       
  3435         }
       
  3436     else
       
  3437         {
       
  3438         tmp = _L("Unknown");
       
  3439         }
       
  3440     
       
  3441     // Clear screen.
       
  3442     iConsole->ClearScreen();
       
  3443     TBuf<KMaxLineLength> line;
       
  3444 
       
  3445     line.Append(_L(" : "));
       
  3446     LimitedAppend(line, iCase->TestInfo().TestCaseTitle() );
       
  3447     Print( line );
       
  3448 
       
  3449     const RPointerArray<CTestProgress>& prints = iCase->PrintArray();
       
  3450 
       
  3451     Recalculate( prints.Count() );
       
  3452 
       
  3453     // Print the print statements.
       
  3454     for ( TInt i = iFirst; i <= iLast; i++ )
       
  3455         {
       
  3456         line.Zero();
       
  3457         if( iLine == i )
       
  3458             {
       
  3459             line = _L( "*" ); // For indicating current line
       
  3460             }
       
  3461         line.Append( prints[i]->iDescription );
       
  3462         line.Append(_L(" : "));
       
  3463         LimitedAppend(line, prints[i]->iText );
       
  3464 
       
  3465         // Print the line
       
  3466         TSize screenSize;
       
  3467         screenSize = iConsole->ScreenSize();
       
  3468         Print ( line.Left(screenSize.iWidth ) );
       
  3469         }
       
  3470 
       
  3471     }
       
  3472 
       
  3473 /*
       
  3474 -------------------------------------------------------------------------------
       
  3475 
       
  3476     Class: CCaseExecutionView
       
  3477 
       
  3478     Method: SelectL
       
  3479 
       
  3480     Description: Process keypresses in menu. Either updates position in
       
  3481     menu or returns new menu.
       
  3482 
       
  3483     Parameters: TKeyCode aSelection: in: Key
       
  3484                 TBool& aContinue: out: Has user pressed "Quit"
       
  3485 
       
  3486     Return Values: CMenu* New menu
       
  3487 
       
  3488     Errors/Exceptions: None
       
  3489 
       
  3490     Status: Draft
       
  3491 
       
  3492 -------------------------------------------------------------------------------
       
  3493 */
       
  3494 CMenu* CCaseExecutionView::SelectL( TKeyCode aSelection, TBool& /*aContinue*/ )
       
  3495     {
       
  3496     iShowLine = EFalse;
       
  3497     MapKeyCode(aSelection);
       
  3498 
       
  3499     // Take prints
       
  3500     const RPointerArray<CTestProgress>& prints = iCase->PrintArray();
       
  3501 
       
  3502     switch( aSelection  )
       
  3503         {        
       
  3504         case EKeyEnter:
       
  3505         case EKeyRightArrow:
       
  3506             {
       
  3507             // Check that not out of range(too many EKeyUpArrow or EKeyDownArrow)
       
  3508             if( iLine >= prints.Count() || iLine < 0)
       
  3509                 {
       
  3510                 // do nothing
       
  3511                 break;
       
  3512                 }
       
  3513             TInt extra = 3; // ' : '
       
  3514             TInt length( 0 );
       
  3515             length = length + prints[iLine]->iDescription.Length();
       
  3516             length = length + prints[iLine]->iText.Length();
       
  3517             // Selected print line in seperate(operation will do in
       
  3518             // CCaseExecutionView::PrintMenuL() method )
       
  3519             delete iLineTextBuf;
       
  3520 			iLineTextBuf = NULL;
       
  3521             TRAPD( ret, iLineTextBuf = HBufC::NewL( length + extra ) );
       
  3522             if( ret != KErrNone )
       
  3523                 {
       
  3524                 User::InfoPrint( _L("Line show failed, maybe out of memory!!!") );
       
  3525                 break;
       
  3526                 }
       
  3527             TPtr ptr = iLineTextBuf->Des();
       
  3528             ptr.Copy( prints[iLine]->iDescription );
       
  3529             ptr.Append( _L( " : " ) );
       
  3530             ptr.Append( prints[iLine]->iText );
       
  3531             iShowLine = ETrue;
       
  3532             break;
       
  3533             }
       
  3534         case EKeyLeftArrow:
       
  3535             {
       
  3536             return iParent;
       
  3537             }
       
  3538 		// Go down
       
  3539 		case EKeyDownArrow:
       
  3540 			{
       
  3541 			if ( iFirst + iPosOnScreen == iItemCount - 1 )
       
  3542 				{
       
  3543 				// If end of the list, go to beginning
       
  3544 				iPosOnScreen = 0;
       
  3545 				iFirst = 0;
       
  3546 				iLast = iScreenSize;
       
  3547 				if ( iLast > iItemCount - 1 )
       
  3548 					{
       
  3549 					iLast = iItemCount - 1;
       
  3550 					}
       
  3551 				iLine = 0;
       
  3552 				}
       
  3553 			else 
       
  3554 				{
       
  3555 				if ( iPosOnScreen == iScreenSize )
       
  3556 					{
       
  3557 					iLast++;
       
  3558 					iFirst++;
       
  3559 					}
       
  3560 				else
       
  3561 					{
       
  3562 					// Going down "in-screen", no need to update items
       
  3563 					iPosOnScreen++;
       
  3564 					}
       
  3565 				iLine++;
       
  3566 				}			
       
  3567 			break;
       
  3568 			}
       
  3569 			
       
  3570 		// Go Up
       
  3571 		case EKeyUpArrow:
       
  3572 			{
       
  3573 			if ( iFirst + iPosOnScreen == 0 )
       
  3574 				{
       
  3575 				// If in the beginning of the list
       
  3576 
       
  3577 				iLast = iItemCount - 1;
       
  3578 				iFirst = iLast - iScreenSize;
       
  3579 				if ( iFirst < 0 )
       
  3580 					{
       
  3581 					iFirst = 0;            	
       
  3582 					}
       
  3583 				iPosOnScreen = iLast - iFirst;
       
  3584 				iLine = iItemCount - 1;
       
  3585 				}
       
  3586 			else 
       
  3587 				{
       
  3588 				if ( iPosOnScreen == 0 )
       
  3589 					{
       
  3590 					iLast--;
       
  3591 					iFirst--;
       
  3592 					}
       
  3593 				else
       
  3594 					{
       
  3595 					iPosOnScreen--;
       
  3596 					}
       
  3597 				iLine--;
       
  3598 			}
       
  3599 			break;
       
  3600 			}
       
  3601 		// Additional keys
       
  3602 		case EKeyHome:
       
  3603 		case '3':
       
  3604 			iPosOnScreen = 0;
       
  3605 			iLine = 0;
       
  3606 			iFirst = 0;
       
  3607 			iLast = iScreenSize;
       
  3608 
       
  3609 			if ( iLast > iItemCount - 1 )
       
  3610 				{
       
  3611 				iLast = iItemCount - 1;
       
  3612 				}
       
  3613 			break;
       
  3614 
       
  3615 		case EKeyEnd:
       
  3616 		case '9':
       
  3617 			iLast = iItemCount - 1;
       
  3618 			iFirst = iLast - iScreenSize;
       
  3619 			iLine = iItemCount - 1;
       
  3620 			
       
  3621 			if ( iFirst < 0 )
       
  3622 				{
       
  3623 				iFirst = 0;
       
  3624 				}
       
  3625 			iPosOnScreen = iLast - iFirst;        
       
  3626 			break;
       
  3627 
       
  3628 		case EKeyPageUp:
       
  3629 		case '1':
       
  3630 			iFirst = iFirst - iScreenSize;
       
  3631 			iLast = iLast - iScreenSize;
       
  3632 
       
  3633 			if ( iFirst < 0 )
       
  3634 				{
       
  3635 				iFirst = 0;
       
  3636 				iLast = iScreenSize;
       
  3637 				if ( iLast > iItemCount - 1 )
       
  3638 					{
       
  3639 					iLast = iItemCount - 1;
       
  3640 					}
       
  3641 				iPosOnScreen = 0;
       
  3642 				}
       
  3643 			
       
  3644 			iLine = iLine - iScreenSize;
       
  3645 			if ( iLine < 0 )
       
  3646 				{
       
  3647 				iLine = 0;
       
  3648 				}
       
  3649 			break;
       
  3650 
       
  3651 		case EKeyPageDown:
       
  3652 		case '7':
       
  3653 			iFirst = iFirst + iScreenSize;
       
  3654 			iLast = iLast + iScreenSize;
       
  3655 
       
  3656 			// Going too far
       
  3657 			if ( iLast > iItemCount - 1 )
       
  3658 				{
       
  3659 				iLast = iItemCount - 1;
       
  3660 				iFirst = iLast - iScreenSize;
       
  3661 				if ( iFirst < 0 )
       
  3662 					{
       
  3663 					iFirst = 0;
       
  3664 					}
       
  3665 				iPosOnScreen = iLast - iFirst;
       
  3666 				}
       
  3667 
       
  3668 			iLine = iLine + iScreenSize;
       
  3669 			if ( iLine > iItemCount - 1 )
       
  3670 				{
       
  3671 				iLine = iItemCount - 1;
       
  3672 				}
       
  3673 			break;
       
  3674         default:
       
  3675             {
       
  3676             break;
       
  3677             }
       
  3678         }
       
  3679     
       
  3680     return this;
       
  3681 
       
  3682     }
       
  3683 
       
  3684 /*
       
  3685 -------------------------------------------------------------------------------
       
  3686 
       
  3687     Class: CTestSetMenu
       
  3688 
       
  3689     Method: NewL
       
  3690 
       
  3691     Description: Constructs new menu.
       
  3692 
       
  3693     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  3694                 CMenu* aParent            :in:      Parent menu
       
  3695                 const TDesC& aName        :in:      Menu name
       
  3696 
       
  3697     Return Values: CMenu*                           New menu
       
  3698 
       
  3699     Errors/Exceptions: Leaves if memory allocation fails
       
  3700                        Leaves if ConstructL leaves.
       
  3701 
       
  3702     Status: Draft
       
  3703 
       
  3704 -------------------------------------------------------------------------------
       
  3705 */
       
  3706 CTestSetMenu* CTestSetMenu::NewL( CConsoleMain* aConsole,
       
  3707                                         CMenu* aParent,
       
  3708                                         const TDesC& aName )
       
  3709     {    
       
  3710 
       
  3711     CTestSetMenu* self = new ( ELeave ) CTestSetMenu();
       
  3712     CleanupStack::PushL( self );
       
  3713     self->ConstructL( aConsole, aParent, aName );
       
  3714     CleanupStack::Pop( self );
       
  3715     return self;
       
  3716     
       
  3717     }
       
  3718        
       
  3719 /*
       
  3720 -------------------------------------------------------------------------------
       
  3721 
       
  3722     Class: CTestSetMenu
       
  3723 
       
  3724     Method: CTestSetMenu
       
  3725 
       
  3726     Description: Constructor
       
  3727 
       
  3728     Parameters: None
       
  3729 
       
  3730     Return Values: None
       
  3731 
       
  3732     Errors/Exceptions: None
       
  3733 
       
  3734     Status: Draft
       
  3735 
       
  3736 -------------------------------------------------------------------------------
       
  3737 */
       
  3738 CTestSetMenu::CTestSetMenu():
       
  3739     iTestSetCreated( EFalse )
       
  3740     {
       
  3741     
       
  3742     iTestSetName.Copy( KDefaultSetName );    
       
  3743     
       
  3744     }
       
  3745     
       
  3746 /*
       
  3747 -------------------------------------------------------------------------------
       
  3748 
       
  3749     Class: CTestSetMenu
       
  3750 
       
  3751     Method: ~CTestSetMenu
       
  3752 
       
  3753     Description: Destructor
       
  3754 
       
  3755     Parameters: None
       
  3756 
       
  3757     Return Values: None
       
  3758 
       
  3759     Errors/Exceptions: None
       
  3760 
       
  3761     Status: Draft
       
  3762     
       
  3763 -------------------------------------------------------------------------------
       
  3764 */
       
  3765 CTestSetMenu::~CTestSetMenu()
       
  3766     {
       
  3767     
       
  3768     delete iSubMenu;
       
  3769     iSubMenu = 0;
       
  3770     
       
  3771     }
       
  3772 
       
  3773 /*
       
  3774 -------------------------------------------------------------------------------
       
  3775 
       
  3776     Class: CTestSetMenu
       
  3777 
       
  3778     Method: ConstructL
       
  3779 
       
  3780     Description: Second level constructor. 
       
  3781 
       
  3782     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  3783                 CMenu* aParent            :in:      Parent menu
       
  3784                 const TDesC& aName        :in:      Menu name
       
  3785 
       
  3786     Return Values: None
       
  3787 
       
  3788     Errors/Exceptions: Leaves if parent class ConstructL leaves
       
  3789                        Leaves if module can't be appended to list
       
  3790 
       
  3791     Status: Draft
       
  3792 
       
  3793 -------------------------------------------------------------------------------
       
  3794 */
       
  3795 void CTestSetMenu::ConstructL( CConsoleMain* aConsole,
       
  3796                                   CMenu* aParent,
       
  3797                                   const TDesC& aName
       
  3798                                  )
       
  3799     {
       
  3800 
       
  3801     CMenu::ConstructL( aConsole, aParent, aName);
       
  3802    
       
  3803     }
       
  3804 
       
  3805 /*
       
  3806 -------------------------------------------------------------------------------
       
  3807 
       
  3808     Class: CTestSetMenu
       
  3809 
       
  3810     Method: SetTestSetName
       
  3811 
       
  3812     Description: Set test set name.
       
  3813 
       
  3814     Parameters: const TFileName& aTestSetName: in: Test set name
       
  3815 
       
  3816     Return Values: None
       
  3817     
       
  3818     Errors/Exceptions: None
       
  3819 
       
  3820     Status: Draft
       
  3821 
       
  3822 -------------------------------------------------------------------------------
       
  3823 */
       
  3824 void CTestSetMenu::SetTestSetFileName( const TFileName& aTestSetName )
       
  3825     {
       
  3826     
       
  3827     iTestSetName.Copy( aTestSetName );    
       
  3828     
       
  3829     }
       
  3830         
       
  3831 /*
       
  3832 -------------------------------------------------------------------------------
       
  3833 
       
  3834     Class: CTestSetMenu
       
  3835 
       
  3836     Method: ItemText
       
  3837 
       
  3838     Description: Returns menu item text.
       
  3839 
       
  3840     Parameters: const TInt                :in:      Menu index
       
  3841 
       
  3842     Return Values: const TDesC&                     Menu line text
       
  3843 
       
  3844     Errors/Exceptions: None
       
  3845 
       
  3846     Status: Draft
       
  3847 
       
  3848 -------------------------------------------------------------------------------
       
  3849 */
       
  3850 TInt CTestSetMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  3851     {
       
  3852     
       
  3853     if( !iTestSetCreated )
       
  3854         {
       
  3855         if( aArray.Append( KSetCreate ) != KErrNone )
       
  3856             {
       
  3857             return KErrNoMemory;
       
  3858             }
       
  3859         if( aArray.Append( KSetLoad ) != KErrNone )
       
  3860             {
       
  3861             return KErrNoMemory;
       
  3862             }        
       
  3863         }
       
  3864     else
       
  3865         {
       
  3866         if( aArray.Append( KSetShow ) != KErrNone )
       
  3867             {
       
  3868             return KErrNoMemory;
       
  3869             }                
       
  3870         if( aArray.Append( KSetStartSeq ) != KErrNone )
       
  3871             {
       
  3872             return KErrNoMemory;
       
  3873             }                
       
  3874         if( aArray.Append( KSetStartPar ) != KErrNone )
       
  3875             {
       
  3876             return KErrNoMemory;
       
  3877             }
       
  3878         if( aArray.Append( KSetRemove ) != KErrNone )
       
  3879             {
       
  3880             return KErrNoMemory;
       
  3881             }                
       
  3882         if( aArray.Append( KSetSave ) != KErrNone )
       
  3883             {
       
  3884             return KErrNoMemory;
       
  3885             }                
       
  3886         if( aArray.Append( KSetCaseAdd ) != KErrNone )
       
  3887             {
       
  3888             return KErrNoMemory;
       
  3889             }                
       
  3890         if( aArray.Append( KSetCaseRemove ) != KErrNone )
       
  3891             {
       
  3892             return KErrNoMemory;
       
  3893             }                
       
  3894         if( aArray.Append( KSetStartSeqNotRun ) != KErrNone )
       
  3895             {
       
  3896             return KErrNoMemory;
       
  3897             }                
       
  3898         }
       
  3899         
       
  3900     return KErrNone; 
       
  3901 
       
  3902     }
       
  3903 
       
  3904 /*
       
  3905 -------------------------------------------------------------------------------
       
  3906     Class: CTestSetMenu
       
  3907 
       
  3908     Method: PrintMenuL
       
  3909 
       
  3910     Description: Prints the menu
       
  3911 
       
  3912     Parameters: None
       
  3913 
       
  3914     Return Values: None
       
  3915 
       
  3916     Errors/Exceptions: None
       
  3917 
       
  3918     Status: Draft
       
  3919     
       
  3920 -------------------------------------------------------------------------------
       
  3921 */
       
  3922 void CTestSetMenu::PrintMenuL( TUpdateType aType )
       
  3923     {
       
  3924     
       
  3925     if( iTestSetCreated )
       
  3926         {
       
  3927         RRefArray<CTestSetInfo> setInfos;
       
  3928         TInt ret = iMain->UIStore().TestSets( setInfos );
       
  3929 
       
  3930         CMenu::PrintMenuL( aType );
       
  3931 
       
  3932         if( (  ret != KErrNone ) ||
       
  3933             ( setInfos.Count() != 1 ) )
       
  3934             {
       
  3935             // Should never ever happen
       
  3936             User::Panic( KTestSetMenu, KErrGeneral );
       
  3937             return;
       
  3938             }
       
  3939         const CTestSetInfo& set = setInfos[0];
       
  3940         setInfos.Reset();
       
  3941         setInfos.Close();
       
  3942         
       
  3943         const RRefArray<const CTestInfo> testCases = set.TestCases();
       
  3944         
       
  3945         TBuf<KMaxLineLength> line;
       
  3946         TInt count = testCases.Count();
       
  3947         for(TInt i = 0; i < count && i + ESetLAST <= iScreenSize; i++)
       
  3948             {
       
  3949             line = _L("    ");
       
  3950             LimitedAppend ( line, testCases[i].TestCaseTitle() );
       
  3951 
       
  3952             // Print the line
       
  3953             Print(line);
       
  3954             }
       
  3955         }
       
  3956     else
       
  3957         {
       
  3958         CMenu::PrintMenuL( aType );
       
  3959         }    
       
  3960     
       
  3961     }
       
  3962     
       
  3963 /*
       
  3964 -------------------------------------------------------------------------------
       
  3965 
       
  3966     Class: CTestSetMenu
       
  3967 
       
  3968     Method: SelectL
       
  3969 
       
  3970     Description: Process keypresses in menu. Handle right arrow and enter
       
  3971                  here, others in parent menu.
       
  3972 
       
  3973     Parameters: TKeyCode aSelection       :in:      Key
       
  3974                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  3975 
       
  3976     Return Values: CMenu*                           New menu
       
  3977 
       
  3978     Errors/Exceptions: None
       
  3979 
       
  3980     Status: Draft
       
  3981 
       
  3982 -------------------------------------------------------------------------------
       
  3983 */
       
  3984 CMenu* CTestSetMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  3985     {
       
  3986     TBuf<32> currSetName;
       
  3987     MapKeyCode(aSelection);    
       
  3988     
       
  3989     if( ( aSelection != EKeyRightArrow ) &&
       
  3990         ( aSelection != EKeyEnter ) )
       
  3991         {
       
  3992         return CMenu::SelectL( aSelection, aContinue );
       
  3993         }            
       
  3994     
       
  3995     TInt ret = KErrNone;        
       
  3996     if( !iTestSetCreated )
       
  3997         {
       
  3998         switch( iPosOnScreen )
       
  3999             {
       
  4000             case ESetCreate:
       
  4001                 ret = iMain->UIStore().CreateTestSet( iTestSetName );
       
  4002                 if( ret != KErrNone )
       
  4003                     {
       
  4004                     User::InfoPrint( _L("Test set creation failed") );
       
  4005                     }
       
  4006                 break;
       
  4007             case ESetLoad: 
       
  4008             
       
  4009             	return iItems[0];
       
  4010             } 
       
  4011         if( ret == KErrNone )
       
  4012             {
       
  4013             iTestSetCreated = ETrue;
       
  4014             }      
       
  4015         }
       
  4016     else
       
  4017         {
       
  4018         CStartedTestSet::TSetType setType = CStartedTestSet::ESetSequential;
       
  4019         switch( iPosOnScreen )
       
  4020             {
       
  4021             case ESetShow:   
       
  4022             // Add the test sets menu
       
  4023                 delete iSubMenu;
       
  4024                 iSubMenu = 0;
       
  4025                 iSubMenu = CStartedTestSetMenu::NewL( iMain, 
       
  4026                                         this, 
       
  4027                                         _L("Started test sets menu"));
       
  4028                 return iSubMenu;
       
  4029             case ESetRemove: 
       
  4030                 ret = iMain->UIStore().RemoveTestSet( iTestSetName );
       
  4031                 if( ret != KErrNone )
       
  4032                     {
       
  4033                     User::InfoPrint( _L("Test set creation failed") );
       
  4034                     }
       
  4035                 iTestSetCreated = EFalse;  
       
  4036                 break;
       
  4037             case ESetCaseAdd:   
       
  4038                 delete iSubMenu;
       
  4039                 iSubMenu = 0;
       
  4040                 iSubMenu = CTestSetAddCaseMenu::NewL( 
       
  4041                                 iMain, 
       
  4042                                 this, 
       
  4043                                 _L("Add test cases to test set"),
       
  4044                                 iTestSetName );
       
  4045                                 
       
  4046                 return iSubMenu;
       
  4047             case ESetCaseRemove: 
       
  4048                 delete iSubMenu;
       
  4049                 iSubMenu = 0;
       
  4050                 iSubMenu =  CTestSetRemoveCaseMenu::NewL( 
       
  4051                                 iMain, 
       
  4052                                 this, 
       
  4053                                 _L("Remove test cases from test set"),
       
  4054                                 iTestSetName );
       
  4055                                 
       
  4056                                 
       
  4057                 return iSubMenu;  
       
  4058             case ESetSave:   
       
  4059                 // during the save operation default set name (ConsoleUI.set) is replaced with
       
  4060                 // new name created base on current date.
       
  4061                 // Set is the reloaded to make sure that 
       
  4062                 // old test set with default name will not affect test execution
       
  4063                 currSetName.Copy( iTestSetName );
       
  4064                 ret = iMain->UIStore().SaveTestSet2( iTestSetName );
       
  4065                 if( ret != KErrNone )
       
  4066                     {
       
  4067                     User::InfoPrint( _L("Test set saving failed at saving test set") );
       
  4068                     } 
       
  4069                 
       
  4070                 ret = iMain->UIStore().RemoveTestSet( currSetName );
       
  4071                 if( ret != KErrNone )
       
  4072                     {
       
  4073                     User::InfoPrint( _L("Test set saving failed at removing old test set") );
       
  4074                     }             
       
  4075                 
       
  4076                 ret = iMain->UIStore().LoadTestSet( iTestSetName );
       
  4077                 if( ret != KErrNone )
       
  4078                     {
       
  4079                     User::InfoPrint( _L("Test set saving failed at reloding test set") );
       
  4080                     }   
       
  4081                 break;
       
  4082   
       
  4083   			default:          
       
  4084 //            case ESetStartPar:   
       
  4085 //                setType = CStartedTestSet::ESetParallel;
       
  4086 //            case ESetStartSeq: 
       
  4087             //case ESetStartRep: 
       
  4088             	if( iPosOnScreen == ESetStartPar )
       
  4089                   {
       
  4090 	            		setType = CStartedTestSet::ESetParallel;
       
  4091                   }
       
  4092               if( iPosOnScreen == ESetStartSeq || iPosOnScreen == ESetStartSeqNotRun)
       
  4093 	                {
       
  4094 	                RRefArray<CTestSetInfo> setInfos;
       
  4095 	                ret = iMain->UIStore().TestSets( setInfos );
       
  4096 	                if( (  ret != KErrNone ) ||
       
  4097 	                    ( setInfos.Count() != 1 ) )
       
  4098 	                    {
       
  4099 	                    // Should never ever happen
       
  4100 	                    User::Panic( KTestSetMenu, KErrGeneral );
       
  4101 	                    }
       
  4102 	                const CTestSetInfo& set = setInfos[0];
       
  4103 	                setInfos.Reset();
       
  4104 	                setInfos.Close();
       
  4105 	                
       
  4106 	                TInt index;
       
  4107 	                ret = KErrGeneral;
       
  4108 	                if(iPosOnScreen == ESetStartSeq)
       
  4109 	                    {
       
  4110                         ret = iMain->UIStore().StartTestSet(set, index, setType);
       
  4111                         }
       
  4112                     else if(iPosOnScreen == ESetStartSeqNotRun)
       
  4113                         {
       
  4114 	                    ret = iMain->UIStore().StartTestSet(set, index, setType, ETrue);
       
  4115 	                    }
       
  4116 	                if( ret != KErrNone )
       
  4117 	                    {
       
  4118 	                    User::InfoPrint( _L("Test set starting failed") );
       
  4119 	                    }                 
       
  4120 	                }    
       
  4121                 break;
       
  4122             }
       
  4123         }
       
  4124         
       
  4125     return this;
       
  4126 
       
  4127     }
       
  4128 /**
       
  4129 -------------------------------------------------------------------------------
       
  4130 
       
  4131 Class: CTestSetChoiceMenu
       
  4132 
       
  4133 Method: NewL
       
  4134 
       
  4135 Description: Constructs new menu.
       
  4136 
       
  4137 Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4138             CMenu* aParent            :in:      Parent menu
       
  4139             const TDesC& aName        :in:      Menu name
       
  4140 
       
  4141 Return Values: CMenu*                           New menu
       
  4142 
       
  4143 Errors/Exceptions: Leaves if memory allocation fails
       
  4144                    Leaves if ConstructL leaves.
       
  4145 
       
  4146 Status: Draft
       
  4147 
       
  4148 -------------------------------------------------------------------------------
       
  4149 */
       
  4150 CTestSetChoiceMenu* CTestSetChoiceMenu::NewL( CConsoleMain* aConsole,
       
  4151                                     CMenu* aParent,
       
  4152                                     const TDesC& aName )
       
  4153 {    
       
  4154 
       
  4155 	CTestSetChoiceMenu* self = new ( ELeave ) CTestSetChoiceMenu();
       
  4156 	CleanupStack::PushL( self );
       
  4157 	self->ConstructL( aConsole, aParent, aName );
       
  4158 	CleanupStack::Pop( self );
       
  4159 	return self;
       
  4160 
       
  4161 }
       
  4162 /*
       
  4163 -------------------------------------------------------------------------------
       
  4164 
       
  4165     Class: CTestSetChoiceMenu
       
  4166 
       
  4167     Method: CTestSetChoiceMenu
       
  4168 
       
  4169     Description: Constructor
       
  4170 
       
  4171     Parameters: None
       
  4172 
       
  4173     Return Values: None
       
  4174 
       
  4175     Errors/Exceptions: None
       
  4176 
       
  4177     Status: Draft
       
  4178 
       
  4179 -------------------------------------------------------------------------------
       
  4180 */
       
  4181 CTestSetChoiceMenu::CTestSetChoiceMenu()
       
  4182     
       
  4183     {
       
  4184 
       
  4185     }
       
  4186 
       
  4187 /*
       
  4188 -------------------------------------------------------------------------------
       
  4189 
       
  4190     Class: CTestSetChoiceMenu
       
  4191 
       
  4192     Method: ~CTestSetChoiceMenu
       
  4193 
       
  4194     Description: Destructor
       
  4195 
       
  4196     Parameters: None
       
  4197 
       
  4198     Return Values: None
       
  4199 
       
  4200     Errors/Exceptions: None
       
  4201 
       
  4202     Status: Draft
       
  4203     
       
  4204 -------------------------------------------------------------------------------
       
  4205 */
       
  4206 CTestSetChoiceMenu::~CTestSetChoiceMenu()
       
  4207     {
       
  4208     
       
  4209     
       
  4210 
       
  4211     iFileList.ResetAndDestroy();
       
  4212     iFileList.Close();
       
  4213 
       
  4214     
       
  4215     }
       
  4216 
       
  4217 /*
       
  4218 -------------------------------------------------------------------------------
       
  4219 
       
  4220     Class: CTestSetChoiceMenu
       
  4221 
       
  4222     Method: ConstructL
       
  4223 
       
  4224     Description: Second level constructor. 
       
  4225 
       
  4226     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4227                 CMenu* aParent            :in:      Parent menu
       
  4228                 const TDesC& aName        :in:      Menu name
       
  4229 
       
  4230     Return Values: None
       
  4231 
       
  4232     Errors/Exceptions: Leaves if parent class ConstructL leaves
       
  4233                        Leaves if module can't be appended to list
       
  4234 
       
  4235     Status: Draft
       
  4236 
       
  4237 -------------------------------------------------------------------------------
       
  4238 */
       
  4239 void CTestSetChoiceMenu::ConstructL( CConsoleMain* aConsole,
       
  4240                                   CMenu* aParent,
       
  4241                                   const TDesC& aName
       
  4242                                  )
       
  4243     {
       
  4244 
       
  4245     CMenu::ConstructL( aConsole, aParent, aName);    
       
  4246     }
       
  4247 
       
  4248 /*
       
  4249 -------------------------------------------------------------------------------
       
  4250 
       
  4251     Class: CTestSetChoiceMenu
       
  4252 
       
  4253     Method: ItemText
       
  4254 
       
  4255     Description: Returns menu item text.
       
  4256 
       
  4257     Parameters: const TInt                :in:      Menu index
       
  4258 
       
  4259     Return Values: const TDesC&                     Menu line text
       
  4260 
       
  4261     Errors/Exceptions: None
       
  4262 
       
  4263     Status: Draft
       
  4264 
       
  4265 -------------------------------------------------------------------------------
       
  4266 */
       
  4267 TInt CTestSetChoiceMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  4268     {
       
  4269 
       
  4270    TInt ret = iMain->UIStore().GetTestSetsList( aArray );
       
  4271   
       
  4272    iFileList.ResetAndDestroy();
       
  4273    TRAPD( err,
       
  4274 	//Assign aArray to iFileList, it is used in LoadTestSet
       
  4275    for( TInt i=0 ; i < aArray.Count(); i++)
       
  4276 	  {
       
  4277 	  iFileList.AppendL(aArray[i].AllocL());
       
  4278 	  }
       
  4279      ); // TRAPD
       
  4280    return err;       
       
  4281     }
       
  4282 
       
  4283 /*
       
  4284 -------------------------------------------------------------------------------
       
  4285     Class: CTestSetChoiceMenu
       
  4286 
       
  4287     Method: PrintMenuL
       
  4288 
       
  4289     Description: Prints the menu
       
  4290 
       
  4291     Parameters: None
       
  4292 
       
  4293     Return Values: None
       
  4294 
       
  4295     Errors/Exceptions: None
       
  4296 
       
  4297     Status: Draft
       
  4298     
       
  4299 -------------------------------------------------------------------------------
       
  4300 */
       
  4301 void CTestSetChoiceMenu::PrintMenuL( TUpdateType aType )
       
  4302     {
       
  4303     
       
  4304     iUpdateType = aType;
       
  4305     
       
  4306     TBuf<KMaxLineLength> line;
       
  4307     
       
  4308     // Clear display
       
  4309     iConsole->ClearScreen();
       
  4310 
       
  4311     // Print menu title
       
  4312     Print( Name() );
       
  4313     
       
  4314     RRefArray<TDesC> texts;
       
  4315     if(  iMain->UIStore().GetTestSetsList( texts ) != KErrNone )
       
  4316         {
       
  4317         return;
       
  4318         }
       
  4319     
       
  4320     TInt oldItemCount = iItemCount;
       
  4321      
       
  4322     iItemCount = texts.Count();
       
  4323 
       
  4324     // If first time in menu, update start and end positions
       
  4325     if( (iFirst == iLast) ||        // First time here..
       
  4326         ( iLast >= iItemCount ) ||
       
  4327         ( oldItemCount != iItemCount ) )      // Menu size changed
       
  4328         {
       
  4329         iLast = iItemCount - 1;
       
  4330         iPosOnScreen = 0;
       
  4331 
       
  4332         // If "overflow", then adjust the end
       
  4333         if (iLast > iScreenSize )
       
  4334             {
       
  4335             iLast = iScreenSize;
       
  4336             }
       
  4337         }
       
  4338     
       
  4339     // Print items
       
  4340     for ( TInt i = iFirst; i <= iLast; i++ )
       
  4341         {
       
  4342         line.Zero();
       
  4343         
       
  4344         // Append text before line
       
  4345         AppendBefore( i, line );
       
  4346 
       
  4347         // Get the menu line
       
  4348         LimitedAppend ( line, texts[i] );
       
  4349 
       
  4350         // Print the line
       
  4351         Print(line);
       
  4352 
       
  4353         }
       
  4354     texts.Close();
       
  4355 
       
  4356     }
       
  4357 
       
  4358 /*
       
  4359 -------------------------------------------------------------------------------
       
  4360 
       
  4361     Class: CTestSetChoiceMenu
       
  4362 
       
  4363     Method: SelectL
       
  4364 
       
  4365     Description: Process keypresses in menu. Handle right arrow and enter
       
  4366                  here, others in parent menu.
       
  4367 
       
  4368     Parameters: TKeyCode aSelection       :in:      Key
       
  4369                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  4370 
       
  4371     Return Values: CMenu*                           New menu
       
  4372 
       
  4373     Errors/Exceptions: None
       
  4374 
       
  4375     Status: Draft
       
  4376 
       
  4377 -------------------------------------------------------------------------------
       
  4378 */
       
  4379 CMenu* CTestSetChoiceMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  4380     {
       
  4381     
       
  4382     //return CMenu::SelectL( aSelection, aContinue );    
       
  4383     //return iParent;
       
  4384 	    MapKeyCode(aSelection);
       
  4385 	    TInt ret = 0;
       
  4386 
       
  4387         switch ( aSelection )
       
  4388             {
       
  4389             case EKeyEnter:
       
  4390             case EKeyRightArrow:
       
  4391                 {           
       
  4392                 if(iPosOnScreen < iFileList.Count())
       
  4393                     {
       
  4394                     const TDesC& aSetName = iFileList.operator [](iPosOnScreen)->Des();
       
  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 // End of file