stif/ConsoleUI/src/Consolemenus.cpp
branchRCL_3
changeset 59 8ad140f3dd41
equal deleted inserted replaced
49:7fdc9a71d314 59:8ad140f3dd41
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 * 
       
    14 * Description: This module contains implementation of 
       
    15 * CMenu-derived classes.
       
    16 *
       
    17 */
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include <e32base.h>
       
    21 #include <e32cons.h>
       
    22 #include <e32svr.h>
       
    23 
       
    24 #include <f32file.h>
       
    25 #include <stifinternal/UIEngineContainer.h>
       
    26 
       
    27 #include "ConsoleUI.h"
       
    28 #include "ConsoleMenus.h"
       
    29 
       
    30 // EXTERNAL DATA STRUCTURES
       
    31 
       
    32 // EXTERNAL FUNCTION PROTOTYPES  
       
    33 
       
    34 // CONSTANTS
       
    35 
       
    36 // MACROS
       
    37 
       
    38 // LOCAL CONSTANTS AND MACROS
       
    39 
       
    40 // MODULE DATA STRUCTURES
       
    41 
       
    42 // LOCAL FUNCTION PROTOTYPES
       
    43 LOCAL_C void LimitedAppend( TDes& aOriginal, const TDesC& aAppend);
       
    44 
       
    45 // FORWARD DECLARATIONS
       
    46 
       
    47 // ==================== LOCAL FUNCTIONS =======================================
       
    48 
       
    49 LOCAL_C void LimitedAppend( TDes& aOriginal, const TDesC& aAppend)
       
    50     {
       
    51 
       
    52     TInt spaceLeft = aOriginal.MaxLength() - aOriginal.Length();
       
    53     
       
    54     if (spaceLeft > aAppend.Length())
       
    55         {
       
    56         aOriginal.Append ( aAppend );
       
    57         }
       
    58     else
       
    59         {       
       
    60         aOriginal.Append ( aAppend.Left ( spaceLeft ) );
       
    61         }
       
    62 
       
    63     }
       
    64 
       
    65 // None
       
    66 
       
    67 // ================= MEMBER FUNCTIONS =========================================
       
    68 
       
    69 
       
    70 /*
       
    71 -------------------------------------------------------------------------------
       
    72 
       
    73     Class: CMenu
       
    74 
       
    75     Method: NewL
       
    76 
       
    77     Description: Constructs new menu.
       
    78 
       
    79     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
    80                 CMenu* aParent            :in:      Parent menu
       
    81                 const TDesC& aName        :in:      Menu name
       
    82 
       
    83     Return Values: CMenu*                           New menu
       
    84 
       
    85     Errors/Exceptions: Leaves if memory allocation fails
       
    86                        Leaves if ConstructL leaves.
       
    87 
       
    88     Status: Draft
       
    89 
       
    90 -------------------------------------------------------------------------------
       
    91 */
       
    92 CMenu* CMenu::NewL( CConsoleMain* aConsole,
       
    93                     CMenu* aParent,
       
    94                     const TDesC& aName
       
    95                   )
       
    96     {
       
    97 
       
    98     CMenu* self = new ( ELeave ) CMenu();
       
    99     CleanupStack::PushL( self );
       
   100     self->ConstructL( aConsole, aParent, aName );
       
   101     CleanupStack::Pop( self );
       
   102     return self;
       
   103 
       
   104     }
       
   105 
       
   106 /*
       
   107 -------------------------------------------------------------------------------
       
   108 
       
   109     Class: CMenu
       
   110 
       
   111     Method: ConstructL
       
   112 
       
   113     Description: Second level constructor.
       
   114 
       
   115     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
   116                 CMenu* aParent            :in:      Parent menu
       
   117                 const TDesC& aName        :in:      Menu name
       
   118 				const TDesC& aHeader	  :in:		Text containing STIF version info
       
   119 				
       
   120     Return Values: None
       
   121 
       
   122     Errors/Exceptions: None
       
   123 
       
   124     Status: Draft
       
   125 
       
   126 -------------------------------------------------------------------------------
       
   127 */
       
   128 void CMenu::ConstructL( CConsoleMain* aConsole,
       
   129                         CMenu* aParent,
       
   130                         const TDesC& aName,
       
   131                         const TDesC& aHeader
       
   132                       )
       
   133     {
       
   134  
       
   135     // Store the parameters
       
   136     iMain = aConsole;
       
   137     iConsole = aConsole->GetConsole();
       
   138     iParent = aParent;
       
   139     iName = aName;
       
   140     iHeader = aHeader;
       
   141 
       
   142     // Get display size
       
   143     const TInt KOverHead = 5;
       
   144     iSize = iConsole->ScreenSize();
       
   145     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( KSetUnload ) != KErrNone )
       
  3879             {
       
  3880             return KErrNoMemory;
       
  3881             }                        
       
  3882         if( aArray.Append( KSetRemove ) != KErrNone )
       
  3883             {
       
  3884             return KErrNoMemory;
       
  3885             }                
       
  3886         if( aArray.Append( KSetSave ) != KErrNone )
       
  3887             {
       
  3888             return KErrNoMemory;
       
  3889             }                
       
  3890         if( aArray.Append( KSetCaseAdd ) != KErrNone )
       
  3891             {
       
  3892             return KErrNoMemory;
       
  3893             }                
       
  3894         if( aArray.Append( KSetCaseRemove ) != KErrNone )
       
  3895             {
       
  3896             return KErrNoMemory;
       
  3897             }                
       
  3898         if( aArray.Append( KSetStartSeqNotRun ) != KErrNone )
       
  3899             {
       
  3900             return KErrNoMemory;
       
  3901             }                
       
  3902         }
       
  3903         
       
  3904     return KErrNone; 
       
  3905 
       
  3906     }
       
  3907 
       
  3908 /*
       
  3909 -------------------------------------------------------------------------------
       
  3910     Class: CTestSetMenu
       
  3911 
       
  3912     Method: PrintMenuL
       
  3913 
       
  3914     Description: Prints the menu
       
  3915 
       
  3916     Parameters: None
       
  3917 
       
  3918     Return Values: None
       
  3919 
       
  3920     Errors/Exceptions: None
       
  3921 
       
  3922     Status: Draft
       
  3923     
       
  3924 -------------------------------------------------------------------------------
       
  3925 */
       
  3926 void CTestSetMenu::PrintMenuL( TUpdateType aType )
       
  3927     {
       
  3928     
       
  3929     if( iTestSetCreated )
       
  3930         {
       
  3931         RRefArray<CTestSetInfo> setInfos;
       
  3932         TInt ret = iMain->UIStore().TestSets( setInfos );
       
  3933 
       
  3934         CMenu::PrintMenuL( aType );
       
  3935 
       
  3936         if( (  ret != KErrNone ) ||
       
  3937             ( setInfos.Count() != 1 ) )
       
  3938             {
       
  3939             // Should never ever happen
       
  3940             User::Panic( KTestSetMenu, KErrGeneral );
       
  3941             return;
       
  3942             }
       
  3943         const CTestSetInfo& set = setInfos[0];
       
  3944         setInfos.Reset();
       
  3945         setInfos.Close();
       
  3946         
       
  3947         const RRefArray<const CTestInfo> testCases = set.TestCases();
       
  3948         
       
  3949         TBuf<KMaxLineLength> line;
       
  3950         TInt count = testCases.Count();
       
  3951         for(TInt i = 0; i < count && i + ESetLAST <= iScreenSize; i++)
       
  3952             {
       
  3953             line = _L("    ");
       
  3954             LimitedAppend ( line, testCases[i].TestCaseTitle() );
       
  3955 
       
  3956             // Print the line
       
  3957             Print(line);
       
  3958             }
       
  3959         }
       
  3960     else
       
  3961         {
       
  3962         CMenu::PrintMenuL( aType );
       
  3963         }    
       
  3964     
       
  3965     }
       
  3966     
       
  3967 /*
       
  3968 -------------------------------------------------------------------------------
       
  3969 
       
  3970     Class: CTestSetMenu
       
  3971 
       
  3972     Method: SelectL
       
  3973 
       
  3974     Description: Process keypresses in menu. Handle right arrow and enter
       
  3975                  here, others in parent menu.
       
  3976 
       
  3977     Parameters: TKeyCode aSelection       :in:      Key
       
  3978                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  3979 
       
  3980     Return Values: CMenu*                           New menu
       
  3981 
       
  3982     Errors/Exceptions: None
       
  3983 
       
  3984     Status: Draft
       
  3985 
       
  3986 -------------------------------------------------------------------------------
       
  3987 */
       
  3988 CMenu* CTestSetMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  3989     {
       
  3990     TBuf<32> currSetName;
       
  3991     MapKeyCode(aSelection);    
       
  3992     
       
  3993     if( ( aSelection != EKeyRightArrow ) &&
       
  3994         ( aSelection != EKeyEnter ) )
       
  3995         {
       
  3996         return CMenu::SelectL( aSelection, aContinue );
       
  3997         }            
       
  3998     
       
  3999     TInt ret = KErrNone;        
       
  4000     if( !iTestSetCreated )
       
  4001         {
       
  4002         switch( iPosOnScreen )
       
  4003             {
       
  4004             case ESetCreate:
       
  4005                 ret = iMain->UIStore().CreateTestSet( iTestSetName );
       
  4006                 if( ret != KErrNone )
       
  4007                     {
       
  4008                     User::InfoPrint( _L("Test set creation failed") );
       
  4009                     }
       
  4010                 break;
       
  4011             case ESetLoad: 
       
  4012             
       
  4013             	return iItems[0];
       
  4014             } 
       
  4015         if( ret == KErrNone )
       
  4016             {
       
  4017             iTestSetCreated = ETrue;
       
  4018             }      
       
  4019         }
       
  4020     else
       
  4021         {
       
  4022         CStartedTestSet::TSetType setType = CStartedTestSet::ESetSequential;
       
  4023         switch( iPosOnScreen )
       
  4024             {
       
  4025             case ESetShow:   
       
  4026             // Add the test sets menu
       
  4027                 delete iSubMenu;
       
  4028                 iSubMenu = 0;
       
  4029                 iSubMenu = CStartedTestSetMenu::NewL( iMain, 
       
  4030                                         this, 
       
  4031                                         _L("Started test sets menu"));
       
  4032                 return iSubMenu;
       
  4033             case ESetUnload:
       
  4034                 ret = iMain->UIStore().UnloadTestSet( iTestSetName );
       
  4035                 if( ret != KErrNone )
       
  4036                     {
       
  4037                     User::InfoPrint( _L("Test set unload failed") );
       
  4038                     }
       
  4039                 iTestSetCreated = EFalse;                  
       
  4040                 break;
       
  4041             case ESetRemove: 
       
  4042                 ret = iMain->UIStore().RemoveTestSet( iTestSetName );
       
  4043                 if( ret != KErrNone )
       
  4044                     {
       
  4045                     User::InfoPrint( _L("Test set remove failed") );
       
  4046                     }
       
  4047                 iTestSetCreated = EFalse;  
       
  4048                 break;
       
  4049             case ESetCaseAdd:   
       
  4050                 delete iSubMenu;
       
  4051                 iSubMenu = 0;
       
  4052                 iSubMenu = CTestSetAddCaseMenu::NewL( 
       
  4053                                 iMain, 
       
  4054                                 this, 
       
  4055                                 _L("Add test cases to test set"),
       
  4056                                 iTestSetName );
       
  4057                                 
       
  4058                 return iSubMenu;
       
  4059             case ESetCaseRemove: 
       
  4060                 delete iSubMenu;
       
  4061                 iSubMenu = 0;
       
  4062                 iSubMenu =  CTestSetRemoveCaseMenu::NewL( 
       
  4063                                 iMain, 
       
  4064                                 this, 
       
  4065                                 _L("Remove test cases from test set"),
       
  4066                                 iTestSetName );
       
  4067                                 
       
  4068                                 
       
  4069                 return iSubMenu;  
       
  4070             case ESetSave:   
       
  4071                 // during the save operation default set name (ConsoleUI.set) is replaced with
       
  4072                 // new name created base on current date.
       
  4073                 // Set is the reloaded to make sure that 
       
  4074                 // old test set with default name will not affect test execution
       
  4075                 currSetName.Copy( iTestSetName );
       
  4076                 ret = iMain->UIStore().SaveTestSet2( iTestSetName );
       
  4077                 if( ret != KErrNone )
       
  4078                     {
       
  4079                     User::InfoPrint( _L("Test set saving failed at saving test set") );
       
  4080                     } 
       
  4081                 
       
  4082                 break;
       
  4083   
       
  4084   			default:          
       
  4085 //            case ESetStartPar:   
       
  4086 //                setType = CStartedTestSet::ESetParallel;
       
  4087 //            case ESetStartSeq: 
       
  4088             //case ESetStartRep: 
       
  4089             	if( iPosOnScreen == ESetStartPar )
       
  4090                   {
       
  4091 	            		setType = CStartedTestSet::ESetParallel;
       
  4092                   }
       
  4093               if( iPosOnScreen == ESetStartSeq || iPosOnScreen == ESetStartSeqNotRun)
       
  4094 	                {
       
  4095 	                RRefArray<CTestSetInfo> setInfos;
       
  4096 	                ret = iMain->UIStore().TestSets( setInfos );
       
  4097 	                if( (  ret != KErrNone ) ||
       
  4098 	                    ( setInfos.Count() != 1 ) )
       
  4099 	                    {
       
  4100 	                    // Should never ever happen
       
  4101 	                    User::Panic( KTestSetMenu, KErrGeneral );
       
  4102 	                    }
       
  4103 	                const CTestSetInfo& set = setInfos[0];
       
  4104 	                setInfos.Reset();
       
  4105 	                setInfos.Close();
       
  4106 	                
       
  4107 	                TInt index;
       
  4108 	                ret = KErrGeneral;
       
  4109 	                if(iPosOnScreen == ESetStartSeq)
       
  4110 	                    {
       
  4111                         ret = iMain->UIStore().StartTestSet(set, index, setType);
       
  4112                         }
       
  4113                     else if(iPosOnScreen == ESetStartSeqNotRun)
       
  4114                         {
       
  4115 	                    ret = iMain->UIStore().StartTestSet(set, index, setType, ETrue);
       
  4116 	                    }
       
  4117 	                if( ret != KErrNone )
       
  4118 	                    {
       
  4119 	                    User::InfoPrint( _L("Test set starting failed") );
       
  4120 	                    }                 
       
  4121 	                }    
       
  4122                 break;
       
  4123             }
       
  4124         }
       
  4125         
       
  4126     return this;
       
  4127 
       
  4128     }
       
  4129 /**
       
  4130 -------------------------------------------------------------------------------
       
  4131 
       
  4132 Class: CTestSetChoiceMenu
       
  4133 
       
  4134 Method: NewL
       
  4135 
       
  4136 Description: Constructs new menu.
       
  4137 
       
  4138 Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4139             CMenu* aParent            :in:      Parent menu
       
  4140             const TDesC& aName        :in:      Menu name
       
  4141 
       
  4142 Return Values: CMenu*                           New menu
       
  4143 
       
  4144 Errors/Exceptions: Leaves if memory allocation fails
       
  4145                    Leaves if ConstructL leaves.
       
  4146 
       
  4147 Status: Draft
       
  4148 
       
  4149 -------------------------------------------------------------------------------
       
  4150 */
       
  4151 CTestSetChoiceMenu* CTestSetChoiceMenu::NewL( CConsoleMain* aConsole,
       
  4152                                     CMenu* aParent,
       
  4153                                     const TDesC& aName )
       
  4154 {    
       
  4155 
       
  4156 	CTestSetChoiceMenu* self = new ( ELeave ) CTestSetChoiceMenu();
       
  4157 	CleanupStack::PushL( self );
       
  4158 	self->ConstructL( aConsole, aParent, aName );
       
  4159 	CleanupStack::Pop( self );
       
  4160 	return self;
       
  4161 
       
  4162 }
       
  4163 /*
       
  4164 -------------------------------------------------------------------------------
       
  4165 
       
  4166     Class: CTestSetChoiceMenu
       
  4167 
       
  4168     Method: CTestSetChoiceMenu
       
  4169 
       
  4170     Description: Constructor
       
  4171 
       
  4172     Parameters: None
       
  4173 
       
  4174     Return Values: None
       
  4175 
       
  4176     Errors/Exceptions: None
       
  4177 
       
  4178     Status: Draft
       
  4179 
       
  4180 -------------------------------------------------------------------------------
       
  4181 */
       
  4182 CTestSetChoiceMenu::CTestSetChoiceMenu()
       
  4183     
       
  4184     {
       
  4185 
       
  4186     }
       
  4187 
       
  4188 /*
       
  4189 -------------------------------------------------------------------------------
       
  4190 
       
  4191     Class: CTestSetChoiceMenu
       
  4192 
       
  4193     Method: ~CTestSetChoiceMenu
       
  4194 
       
  4195     Description: Destructor
       
  4196 
       
  4197     Parameters: None
       
  4198 
       
  4199     Return Values: None
       
  4200 
       
  4201     Errors/Exceptions: None
       
  4202 
       
  4203     Status: Draft
       
  4204     
       
  4205 -------------------------------------------------------------------------------
       
  4206 */
       
  4207 CTestSetChoiceMenu::~CTestSetChoiceMenu()
       
  4208     {
       
  4209     
       
  4210     
       
  4211 
       
  4212     iFileList.ResetAndDestroy();
       
  4213     iFileList.Close();
       
  4214 
       
  4215     
       
  4216     }
       
  4217 
       
  4218 /*
       
  4219 -------------------------------------------------------------------------------
       
  4220 
       
  4221     Class: CTestSetChoiceMenu
       
  4222 
       
  4223     Method: ConstructL
       
  4224 
       
  4225     Description: Second level constructor. 
       
  4226 
       
  4227     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4228                 CMenu* aParent            :in:      Parent menu
       
  4229                 const TDesC& aName        :in:      Menu name
       
  4230 
       
  4231     Return Values: None
       
  4232 
       
  4233     Errors/Exceptions: Leaves if parent class ConstructL leaves
       
  4234                        Leaves if module can't be appended to list
       
  4235 
       
  4236     Status: Draft
       
  4237 
       
  4238 -------------------------------------------------------------------------------
       
  4239 */
       
  4240 void CTestSetChoiceMenu::ConstructL( CConsoleMain* aConsole,
       
  4241                                   CMenu* aParent,
       
  4242                                   const TDesC& aName
       
  4243                                  )
       
  4244     {
       
  4245 
       
  4246     CMenu::ConstructL( aConsole, aParent, aName);    
       
  4247     }
       
  4248 
       
  4249 /*
       
  4250 -------------------------------------------------------------------------------
       
  4251 
       
  4252     Class: CTestSetChoiceMenu
       
  4253 
       
  4254     Method: ItemText
       
  4255 
       
  4256     Description: Returns menu item text.
       
  4257 
       
  4258     Parameters: const TInt                :in:      Menu index
       
  4259 
       
  4260     Return Values: const TDesC&                     Menu line text
       
  4261 
       
  4262     Errors/Exceptions: None
       
  4263 
       
  4264     Status: Draft
       
  4265 
       
  4266 -------------------------------------------------------------------------------
       
  4267 */
       
  4268 TInt CTestSetChoiceMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  4269     {
       
  4270 
       
  4271    TInt ret = iMain->UIStore().GetTestSetsList( aArray );
       
  4272 
       
  4273 	if ( ret != KErrNone )
       
  4274 		{
       
  4275 		return ret;
       
  4276 		}
       
  4277 
       
  4278    iFileList.ResetAndDestroy();
       
  4279    TRAPD( err,
       
  4280 	//Assign aArray to iFileList, it is used in LoadTestSet
       
  4281    for( TInt i=0 ; i < aArray.Count(); i++)
       
  4282 	  {
       
  4283 	  iFileList.AppendL(aArray[i].AllocL());
       
  4284 	  }
       
  4285      ); // TRAPD
       
  4286    return err;       
       
  4287     }
       
  4288 
       
  4289 /*
       
  4290 -------------------------------------------------------------------------------
       
  4291     Class: CTestSetChoiceMenu
       
  4292 
       
  4293     Method: PrintMenuL
       
  4294 
       
  4295     Description: Prints the menu
       
  4296 
       
  4297     Parameters: None
       
  4298 
       
  4299     Return Values: None
       
  4300 
       
  4301     Errors/Exceptions: None
       
  4302 
       
  4303     Status: Draft
       
  4304     
       
  4305 -------------------------------------------------------------------------------
       
  4306 */
       
  4307 void CTestSetChoiceMenu::PrintMenuL( TUpdateType aType )
       
  4308     {
       
  4309     
       
  4310     iUpdateType = aType;
       
  4311     
       
  4312     TBuf<KMaxLineLength> line;
       
  4313     
       
  4314     // Clear display
       
  4315     iConsole->ClearScreen();
       
  4316 
       
  4317     // Print menu title
       
  4318     Print( Name() );
       
  4319     
       
  4320     RRefArray<TDesC> texts;
       
  4321     if(  iMain->UIStore().GetTestSetsList( texts ) != KErrNone )
       
  4322         {
       
  4323         return;
       
  4324         }
       
  4325     
       
  4326     TInt oldItemCount = iItemCount;
       
  4327      
       
  4328     iItemCount = texts.Count();
       
  4329 
       
  4330     // If first time in menu, update start and end positions
       
  4331     if( (iFirst == iLast) ||        // First time here..
       
  4332         ( iLast >= iItemCount ) ||
       
  4333         ( oldItemCount != iItemCount ) )      // Menu size changed
       
  4334         {
       
  4335         iLast = iItemCount - 1;
       
  4336         iPosOnScreen = 0;
       
  4337 
       
  4338         // If "overflow", then adjust the end
       
  4339         if (iLast > iScreenSize )
       
  4340             {
       
  4341             iLast = iScreenSize;
       
  4342             }
       
  4343         }
       
  4344     
       
  4345     // Print items
       
  4346     for ( TInt i = iFirst; i <= iLast; i++ )
       
  4347         {
       
  4348         line.Zero();
       
  4349         
       
  4350         // Append text before line
       
  4351         AppendBefore( i, line );
       
  4352 
       
  4353         // Get the menu line
       
  4354         LimitedAppend ( line, texts[i] );
       
  4355 
       
  4356         // Print the line
       
  4357         Print(line);
       
  4358 
       
  4359         }
       
  4360     texts.Close();
       
  4361 
       
  4362     }
       
  4363 
       
  4364 /*
       
  4365 -------------------------------------------------------------------------------
       
  4366 
       
  4367     Class: CTestSetChoiceMenu
       
  4368 
       
  4369     Method: SelectL
       
  4370 
       
  4371     Description: Process keypresses in menu. Handle right arrow and enter
       
  4372                  here, others in parent menu.
       
  4373 
       
  4374     Parameters: TKeyCode aSelection       :in:      Key
       
  4375                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  4376 
       
  4377     Return Values: CMenu*                           New menu
       
  4378 
       
  4379     Errors/Exceptions: None
       
  4380 
       
  4381     Status: Draft
       
  4382 
       
  4383 -------------------------------------------------------------------------------
       
  4384 */
       
  4385 CMenu* CTestSetChoiceMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  4386     {
       
  4387     
       
  4388     //return CMenu::SelectL( aSelection, aContinue );    
       
  4389     //return iParent;
       
  4390 	    MapKeyCode(aSelection);
       
  4391 	    TInt ret = 0;
       
  4392 
       
  4393         switch ( aSelection )
       
  4394             {
       
  4395             case EKeyEnter:
       
  4396             case EKeyRightArrow:
       
  4397                 {           
       
  4398                 if(iPosOnScreen < iFileList.Count())
       
  4399                     {
       
  4400                     ret = iMain->UIStore().LoadTestSet( iFileList.operator [](iPosOnScreen)->Des() );
       
  4401                     if (ret == KErrNone)
       
  4402                         {
       
  4403                         ((CTestSetMenu*)iParent)->SetCreated();
       
  4404                         ((CTestSetMenu*)iParent)->SetTestSetFileName(iFileList.operator [](iPosOnScreen)->Des());
       
  4405                         }
       
  4406                     return iParent;
       
  4407                     }
       
  4408                 else
       
  4409                     {
       
  4410                     return this;
       
  4411                     }
       
  4412                 }
       
  4413             default:
       
  4414                 break;
       
  4415             }
       
  4416             
       
  4417     return CMenu::SelectL( aSelection, aContinue );    
       
  4418 
       
  4419     }
       
  4420 
       
  4421 
       
  4422 
       
  4423 
       
  4424 
       
  4425 
       
  4426 /*
       
  4427 -------------------------------------------------------------------------------
       
  4428 
       
  4429     CTestSetAddCaseMenu
       
  4430 
       
  4431     Method: NewL
       
  4432 
       
  4433     Description: Constructs new menu.
       
  4434 
       
  4435     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4436                 CMenu* aParent            :in:      Parent menu
       
  4437                 const TDesC& aName        :in:      Menu name
       
  4438 
       
  4439     Return Values: CMenu*                           New menu
       
  4440 
       
  4441     Errors/Exceptions: Leaves if memory allocation fails
       
  4442                        Leaves if ConstructL leaves.
       
  4443 
       
  4444     Status: Draft
       
  4445 
       
  4446 -------------------------------------------------------------------------------
       
  4447 */
       
  4448 CTestSetAddCaseMenu* CTestSetAddCaseMenu::NewL( CConsoleMain* aConsole,
       
  4449                                             CMenu* aParent,
       
  4450                                             const TDesC& aName,
       
  4451                                             TDesC& aTestSetName )
       
  4452     {
       
  4453 
       
  4454     CTestSetAddCaseMenu* self = 
       
  4455         new ( ELeave ) CTestSetAddCaseMenu( aTestSetName );
       
  4456     CleanupStack::PushL( self );
       
  4457     self->ConstructL( aConsole, aParent, aName );
       
  4458     CleanupStack::Pop( self );
       
  4459     return self;
       
  4460     
       
  4461     }
       
  4462 
       
  4463 /*
       
  4464 -------------------------------------------------------------------------------
       
  4465 
       
  4466     CTestSetAddCaseMenu
       
  4467 
       
  4468     Method: CTestSetAddCaseMenu
       
  4469 
       
  4470     Description: Constructor
       
  4471 
       
  4472     Parameters: None
       
  4473 
       
  4474     Return Values: None
       
  4475 
       
  4476     Errors/Exceptions: None
       
  4477 
       
  4478     Status: Draft
       
  4479 
       
  4480 -------------------------------------------------------------------------------
       
  4481 */
       
  4482 CTestSetAddCaseMenu::CTestSetAddCaseMenu( TDesC& aTestSetName ):
       
  4483     iTestSetName( aTestSetName )    
       
  4484     {
       
  4485     
       
  4486     iMenuItemsCount = EAddSelected + 1;
       
  4487     iMenuTotCount += iMenuItemsCount;
       
  4488     
       
  4489     }   
       
  4490 
       
  4491 /*
       
  4492 -------------------------------------------------------------------------------
       
  4493 
       
  4494     CTestSetAddCaseMenu
       
  4495 
       
  4496     Method: ~CTestSetAddCaseMenu
       
  4497 
       
  4498     Description: Destructor
       
  4499 
       
  4500     Parameters: None
       
  4501 
       
  4502     Return Values: None
       
  4503 
       
  4504     Errors/Exceptions: None
       
  4505 
       
  4506     Status: Draft
       
  4507 
       
  4508 -------------------------------------------------------------------------------
       
  4509 */
       
  4510 CTestSetAddCaseMenu::~CTestSetAddCaseMenu()
       
  4511     {
       
  4512     }   
       
  4513 
       
  4514 /*
       
  4515 -------------------------------------------------------------------------------
       
  4516 
       
  4517     Class: CTestSetAddCaseMenu
       
  4518 
       
  4519     Method: ConstructL
       
  4520 
       
  4521     Description: Second level constructor.
       
  4522 
       
  4523     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4524                 CMenu* aParent            :in:      Parent menu
       
  4525                 const TDesC& aName        :in:      Menu name
       
  4526 
       
  4527     Return Values: None
       
  4528 
       
  4529     Errors/Exceptions: None
       
  4530 
       
  4531     Status: Draft
       
  4532 
       
  4533 -------------------------------------------------------------------------------
       
  4534 */
       
  4535 void CTestSetAddCaseMenu::ConstructL( CConsoleMain* aConsole,
       
  4536                                CMenu* aParent,
       
  4537                                const TDesC& aName )
       
  4538     {
       
  4539 
       
  4540     CCaseStartMenu::ConstructL( aConsole, aParent, aName );
       
  4541 
       
  4542     }
       
  4543 
       
  4544 
       
  4545 /*
       
  4546 -------------------------------------------------------------------------------
       
  4547 
       
  4548     Class: CTestSetAddCaseMenu
       
  4549 
       
  4550     Method: ItemText
       
  4551 
       
  4552     Description: Returns menu item text
       
  4553 
       
  4554     Parameters: const TInt                :in:      Menu index
       
  4555 
       
  4556     Return Values: const TDesC&                     Menu line text
       
  4557 
       
  4558     Errors/Exceptions: None
       
  4559 
       
  4560     Status: Draft
       
  4561 
       
  4562 -------------------------------------------------------------------------------
       
  4563 */
       
  4564 TInt CTestSetAddCaseMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  4565     {
       
  4566     
       
  4567     if ( iSetFinished )
       
  4568         {
       
  4569         if( aArray.Append( KAddSelected ) != KErrNone )
       
  4570             {
       
  4571             return KErrNoMemory;
       
  4572             }
       
  4573         }
       
  4574     
       
  4575     return CMultipleBaseMenu::ItemTexts( aArray );
       
  4576     
       
  4577     }
       
  4578 
       
  4579 /*
       
  4580 -------------------------------------------------------------------------------
       
  4581 
       
  4582     Class: CTestSetAddCaseMenu
       
  4583 
       
  4584     Method: SelectL
       
  4585 
       
  4586     Description: Process keypresses in menu. Handle enter and right arrow here,
       
  4587     others in CMenu::SelectL.
       
  4588 
       
  4589     Parameters: TKeyCode aSelection       :in:      Key
       
  4590                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  4591 
       
  4592     Return Values: CMenu*                           New menu
       
  4593 
       
  4594     Errors/Exceptions: None
       
  4595 
       
  4596     Status: Draft
       
  4597 
       
  4598 -------------------------------------------------------------------------------
       
  4599 */
       
  4600 CMenu* CTestSetAddCaseMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  4601     {
       
  4602 
       
  4603     MapKeyCode(aSelection);
       
  4604     
       
  4605     if ( iSetFinished )
       
  4606         {
       
  4607         switch ( aSelection )
       
  4608             {
       
  4609             case EKeyEnter:
       
  4610             case EKeyRightArrow:
       
  4611                 {
       
  4612 
       
  4613                 if ( iFirst + iPosOnScreen == EAddSelected )
       
  4614                     {
       
  4615                     TInt count = iTestCases.Count();    
       
  4616                     for( TInt i=0; i<count; i++ )
       
  4617                         {
       
  4618                         if ( iSetState[i] )
       
  4619                             {
       
  4620                             TInt ret = 
       
  4621                                 iMain->UIStore().AddToTestSet( iTestSetName,
       
  4622                                                                iTestCases[i] );
       
  4623                             if( ret != KErrNone )
       
  4624                                 {
       
  4625                                 User::InfoPrint( _L("Test case adding failed") );
       
  4626                                 }   
       
  4627                             }
       
  4628                         } 
       
  4629                     return iParent;
       
  4630                     }               
       
  4631                 }
       
  4632                 break;
       
  4633             default:
       
  4634                 break;
       
  4635             }
       
  4636         }   
       
  4637         
       
  4638     return CMultipleBaseMenu::SelectL( aSelection, aContinue );
       
  4639         
       
  4640     }
       
  4641 
       
  4642 /*
       
  4643 -------------------------------------------------------------------------------
       
  4644 
       
  4645     CTestSetAddCaseMenu
       
  4646 
       
  4647     Method: NewL
       
  4648 
       
  4649     Description: Constructs new menu.
       
  4650 
       
  4651     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4652                 CMenu* aParent            :in:      Parent menu
       
  4653                 const TDesC& aName        :in:      Menu name
       
  4654 
       
  4655     Return Values: CMenu*                           New menu
       
  4656 
       
  4657     Errors/Exceptions: Leaves if memory allocation fails
       
  4658                        Leaves if ConstructL leaves.
       
  4659 
       
  4660     Status: Draft
       
  4661 
       
  4662 -------------------------------------------------------------------------------
       
  4663 */
       
  4664 CTestSetRemoveCaseMenu* CTestSetRemoveCaseMenu::NewL( CConsoleMain* aConsole,
       
  4665                                             CMenu* aParent,
       
  4666                                             const TDesC& aName,
       
  4667                                             TDesC& aTestSetName )
       
  4668     {
       
  4669 
       
  4670     CTestSetRemoveCaseMenu* self = 
       
  4671         new ( ELeave ) CTestSetRemoveCaseMenu( aTestSetName );
       
  4672     CleanupStack::PushL( self );
       
  4673     self->ConstructL( aConsole, aParent, aName );
       
  4674     CleanupStack::Pop( self );
       
  4675     return self;
       
  4676     
       
  4677     }
       
  4678 
       
  4679 /*
       
  4680 -------------------------------------------------------------------------------
       
  4681 
       
  4682     CTestSetRemoveCaseMenu
       
  4683 
       
  4684     Method: CTestSetRemoveCaseMenu
       
  4685 
       
  4686     Description: Constructor
       
  4687 
       
  4688     Parameters: None
       
  4689 
       
  4690     Return Values: None
       
  4691 
       
  4692     Errors/Exceptions: None
       
  4693 
       
  4694     Status: Draft
       
  4695 
       
  4696 -------------------------------------------------------------------------------
       
  4697 */
       
  4698 CTestSetRemoveCaseMenu::CTestSetRemoveCaseMenu( TDesC& aTestSetName ):
       
  4699     iTestSetName( aTestSetName )    
       
  4700     {
       
  4701     
       
  4702     iMenuItemsCount = ERemoveSelected + 1;
       
  4703     iMenuTotCount += iMenuItemsCount;
       
  4704     
       
  4705     }   
       
  4706 
       
  4707 /*
       
  4708 -------------------------------------------------------------------------------
       
  4709 
       
  4710     CTestSetRemoveCaseMenu
       
  4711 
       
  4712     Method: ~CTestSetRemoveCaseMenu
       
  4713 
       
  4714     Description: Destructor
       
  4715 
       
  4716     Parameters: None
       
  4717 
       
  4718     Return Values: None
       
  4719 
       
  4720     Errors/Exceptions: None
       
  4721 
       
  4722     Status: Draft
       
  4723 
       
  4724 -------------------------------------------------------------------------------
       
  4725 */
       
  4726 CTestSetRemoveCaseMenu::~CTestSetRemoveCaseMenu()
       
  4727     {
       
  4728     }   
       
  4729 
       
  4730 /*
       
  4731 -------------------------------------------------------------------------------
       
  4732 
       
  4733     Class: CTestSetRemoveCaseMenu
       
  4734 
       
  4735     Method: ConstructL
       
  4736 
       
  4737     Description: Second level constructor.
       
  4738 
       
  4739     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4740                 CMenu* aParent            :in:      Parent menu
       
  4741                 const TDesC& aName        :in:      Menu name
       
  4742 
       
  4743     Return Values: None
       
  4744 
       
  4745     Errors/Exceptions: None
       
  4746 
       
  4747     Status: Draft
       
  4748 
       
  4749 -------------------------------------------------------------------------------
       
  4750 */
       
  4751 void CTestSetRemoveCaseMenu::ConstructL( CConsoleMain* aConsole,
       
  4752                                CMenu* aParent,
       
  4753                                const TDesC& aName )
       
  4754     {
       
  4755 
       
  4756     CCaseStartMenu::ConstructL( aConsole, aParent, aName );
       
  4757 
       
  4758     }
       
  4759 
       
  4760 
       
  4761 /*
       
  4762 -------------------------------------------------------------------------------
       
  4763 
       
  4764     Class: CTestSetRemoveCaseMenu
       
  4765 
       
  4766     Method: ItemText
       
  4767 
       
  4768     Description: Returns menu item text
       
  4769 
       
  4770     Parameters: const TInt                :in:      Menu index
       
  4771 
       
  4772     Return Values: const TDesC&                     Menu line text
       
  4773 
       
  4774     Errors/Exceptions: None
       
  4775 
       
  4776     Status: Draft
       
  4777 
       
  4778 -------------------------------------------------------------------------------
       
  4779 */
       
  4780 TInt CTestSetRemoveCaseMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  4781     {
       
  4782 
       
  4783     if ( iSetFinished )
       
  4784         {
       
  4785         if( aArray.Append( KRemoveSelected ) != KErrNone )
       
  4786             {
       
  4787             return KErrNoMemory;
       
  4788             }
       
  4789         }
       
  4790     
       
  4791     return CMultipleBaseMenu::ItemTexts( aArray );
       
  4792     
       
  4793     }
       
  4794 
       
  4795 /*
       
  4796 -------------------------------------------------------------------------------
       
  4797 
       
  4798     Class: CTestSetRemoveCaseMenu
       
  4799 
       
  4800     Method: SelectL
       
  4801 
       
  4802     Description: Process keypresses in menu. Handle enter and right arrow here,
       
  4803     others in CMenu::SelectL.
       
  4804 
       
  4805     Parameters: TKeyCode aSelection       :in:      Key
       
  4806                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  4807 
       
  4808     Return Values: CMenu*                           New menu
       
  4809 
       
  4810     Errors/Exceptions: None
       
  4811 
       
  4812     Status: Draft
       
  4813 
       
  4814 -------------------------------------------------------------------------------
       
  4815 */
       
  4816 CMenu* CTestSetRemoveCaseMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  4817     {
       
  4818 
       
  4819     MapKeyCode(aSelection);
       
  4820     
       
  4821     if ( iSetFinished )
       
  4822         {
       
  4823         switch ( aSelection )
       
  4824             {
       
  4825             case EKeyEnter:
       
  4826             case EKeyRightArrow:
       
  4827                 {
       
  4828 
       
  4829                 if ( iFirst + iPosOnScreen == ERemoveSelected )
       
  4830                     {
       
  4831                     TInt count = iTestCases.Count();    
       
  4832                     for( TInt i=0; i<count; i++ )
       
  4833                         {
       
  4834                         if ( iSetState[i] )
       
  4835                             {
       
  4836                             TInt ret = 
       
  4837                                 iMain->UIStore().RemoveFromTestSet( iTestSetName,
       
  4838                                                                     iTestCases[i] );
       
  4839                             if( ret != KErrNone )
       
  4840                                 {
       
  4841                                 User::InfoPrint( _L("Test case adding failed") );
       
  4842                                 }   
       
  4843                             }
       
  4844                         } 
       
  4845                     return iParent;
       
  4846                     }               
       
  4847                 }
       
  4848                 break;
       
  4849             default:
       
  4850                 break;
       
  4851             }
       
  4852         }   
       
  4853         
       
  4854     return CMultipleBaseMenu::SelectL( aSelection, aContinue );
       
  4855         
       
  4856     }
       
  4857 
       
  4858 /*
       
  4859 -------------------------------------------------------------------------------
       
  4860 
       
  4861     Class: CTestSetRemoveCaseMenu
       
  4862 
       
  4863     Method: UpdateTestCases
       
  4864 
       
  4865     Description: 
       
  4866 
       
  4867     Parameters: 
       
  4868 
       
  4869     Return Values: 
       
  4870 
       
  4871     Errors/Exceptions: None
       
  4872 
       
  4873     Status: Draft
       
  4874 
       
  4875 -------------------------------------------------------------------------------
       
  4876 */
       
  4877 TInt CTestSetRemoveCaseMenu::UpdateTestCases()
       
  4878     {
       
  4879     
       
  4880     TRAPD( err,
       
  4881         const CTestSetInfo& set = iMain->UIStore().TestSetL( iTestSetName );                
       
  4882         const RRefArray<const CTestInfo>& testCases = set.TestCases();
       
  4883 
       
  4884         // Update test cases
       
  4885         iTestCases.Reset();
       
  4886         iSetState.Reset();
       
  4887         
       
  4888         TInt count = testCases.Count();
       
  4889         for( TInt i=0; i<count; i++ )
       
  4890             {
       
  4891             err = iTestCases.Append( testCases[i] );
       
  4892             if( err != KErrNone )
       
  4893                 {
       
  4894                 break;
       
  4895                 }
       
  4896             }
       
  4897 
       
  4898         ); // TRAPD
       
  4899                 
       
  4900     return err;
       
  4901                 
       
  4902     }
       
  4903 
       
  4904 /*
       
  4905 -------------------------------------------------------------------------------
       
  4906 
       
  4907     Class: CCaseMenu
       
  4908 
       
  4909     Method: NewL
       
  4910 
       
  4911     Description: Constructs new menu.
       
  4912 
       
  4913     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4914                 CMenu* aParent            :in:      Parent menu
       
  4915                 const TDesC& aName        :in:      Menu name
       
  4916                 TCaseState aType          :in:      Case state
       
  4917 
       
  4918     Return Values: CMenu*                           New menu
       
  4919 
       
  4920     Errors/Exceptions: Leaves if memory allocation fails
       
  4921                        Leaves if ConstructL leaves.
       
  4922 
       
  4923     Status: Draft
       
  4924 
       
  4925 -------------------------------------------------------------------------------
       
  4926 */
       
  4927 CStartedTestSetMenu* CStartedTestSetMenu::NewL( CConsoleMain* aConsole, 
       
  4928                             CMenu* aParent, 
       
  4929                             const TDesC& aName )
       
  4930     {
       
  4931 
       
  4932     CStartedTestSetMenu* self = new ( ELeave ) CStartedTestSetMenu();
       
  4933     CleanupStack::PushL( self );
       
  4934     self->ConstructL( aConsole, aParent, aName );
       
  4935     CleanupStack::Pop( self );
       
  4936     return self;
       
  4937 
       
  4938     }
       
  4939 
       
  4940 /*
       
  4941 -------------------------------------------------------------------------------
       
  4942 
       
  4943     Class: CStartedTestSetMenu
       
  4944 
       
  4945     Method: CStartedTestSetMenu
       
  4946 
       
  4947     Description: Constructor
       
  4948 
       
  4949     Parameters: None
       
  4950 
       
  4951     Return Values: None
       
  4952 
       
  4953     Errors/Exceptions: None
       
  4954 
       
  4955     Status: Draft
       
  4956 
       
  4957 -------------------------------------------------------------------------------
       
  4958 */
       
  4959 CStartedTestSetMenu::CStartedTestSetMenu()
       
  4960     {
       
  4961     iType = CUIStoreIf::ESetAll;
       
  4962     }
       
  4963 
       
  4964 /*
       
  4965 -------------------------------------------------------------------------------
       
  4966 
       
  4967     Class: CStartedTestSetMenu
       
  4968 
       
  4969     Method: ConstructL
       
  4970 
       
  4971     Description: Second level constructor.
       
  4972 
       
  4973     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  4974                 CMenu* aParent            :in:      Parent menu
       
  4975                 const TDesC& aName        :in:      Menu name
       
  4976                 TCaseState aType          :in:      Case state
       
  4977 
       
  4978     Return Values: None
       
  4979 
       
  4980     Errors/Exceptions: Leaves if parent class ConstructL leaves
       
  4981                        Leaves if memory allocation fails
       
  4982                        Leaves if CCaseOperation menu NewL leaves
       
  4983                        Leaves if UpcateCaseListL leaves
       
  4984 
       
  4985     Status: Draft
       
  4986 
       
  4987 -------------------------------------------------------------------------------
       
  4988 */
       
  4989 void CStartedTestSetMenu::ConstructL( CConsoleMain* aConsole, 
       
  4990                             CMenu* aParent, 
       
  4991                             const TDesC& aName )
       
  4992     {
       
  4993 
       
  4994     CMenu::ConstructL( aConsole, aParent, aName);
       
  4995 
       
  4996     }
       
  4997 
       
  4998 
       
  4999 
       
  5000 /*
       
  5001 -------------------------------------------------------------------------------
       
  5002 
       
  5003     Class: CStartedTestSetMenu
       
  5004 
       
  5005     Method: ~CStartedTestSetMenu
       
  5006 
       
  5007     Description: Destructor
       
  5008 
       
  5009     Parameters: None
       
  5010 
       
  5011     Return Values: None
       
  5012 
       
  5013     Errors/Exceptions: None
       
  5014 
       
  5015     Status: Draft
       
  5016     
       
  5017 -------------------------------------------------------------------------------
       
  5018 */
       
  5019 CStartedTestSetMenu::~CStartedTestSetMenu()
       
  5020     {
       
  5021 
       
  5022     delete iCaseMenu;
       
  5023     iCaseMenu = 0;
       
  5024     
       
  5025     iTestSets.Reset();
       
  5026     iTestSets.Close();
       
  5027 
       
  5028     }
       
  5029 
       
  5030 
       
  5031 /*
       
  5032 -------------------------------------------------------------------------------
       
  5033 
       
  5034     Class: CStartedTestSetMenu
       
  5035 
       
  5036     Method: ItemText
       
  5037 
       
  5038     Description: Returns menu item text
       
  5039 
       
  5040     Parameters: const TInt                :in:      Menu index
       
  5041 
       
  5042     Return Values: const TDesC&                     Menu line text
       
  5043 
       
  5044     Errors/Exceptions: None
       
  5045 
       
  5046     Status: Draft
       
  5047 
       
  5048 -------------------------------------------------------------------------------
       
  5049 */
       
  5050 TInt CStartedTestSetMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  5051     {
       
  5052     
       
  5053     iTestSets.Reset();
       
  5054     
       
  5055     TInt ret = iMain->UIStore().StartedTestSets( iTestSets, iType );
       
  5056     if ( ret != KErrNone )
       
  5057     	{
       
  5058     	return ret;
       
  5059     	}
       
  5060 
       
  5061     TInt count = iTestSets.Count();
       
  5062     for( TInt i=0; i<count; i++ )
       
  5063         {
       
  5064         if( aArray.Append( iTestSets[i].TestSetInfo().Name() ) != KErrNone )
       
  5065             {
       
  5066             return KErrNoMemory;
       
  5067             }
       
  5068         }
       
  5069 
       
  5070     return KErrNone;
       
  5071     }
       
  5072 
       
  5073 /*
       
  5074 -------------------------------------------------------------------------------
       
  5075     Class: CStartedTestSetMenu
       
  5076 
       
  5077     Method: AppendBefore
       
  5078 
       
  5079     Description: Append text before line.
       
  5080 
       
  5081     Parameters: TInt aLine: in: line number 
       
  5082                 TDes& aLine: in: line text
       
  5083 
       
  5084     Return Values: None
       
  5085 
       
  5086     Errors/Exceptions: None
       
  5087 
       
  5088     Status: Draft
       
  5089     
       
  5090 -------------------------------------------------------------------------------
       
  5091 */
       
  5092 void CStartedTestSetMenu::AppendBefore( TInt aLineNum, TDes& aLine )
       
  5093     {
       
  5094     
       
  5095     CMenu::AppendBefore( aLineNum, aLine );
       
  5096     
       
  5097     if( ( aLine.MaxLength() - aLine.Length() ) < 2 )
       
  5098         {
       
  5099         return;
       
  5100         }        
       
  5101     if( iTestSets[aLineNum].Status() & CUIStoreIf::ESetRunning )
       
  5102         {
       
  5103         aLine.Append( _L("O ") );
       
  5104         }
       
  5105     else if( iTestSets[aLineNum].Status() & CUIStoreIf::ESetPassed )
       
  5106         {
       
  5107         aLine.Append( _L("P ") );
       
  5108         }    
       
  5109     else if( iTestSets[aLineNum].Status() & CUIStoreIf::ESetFailed )
       
  5110         {
       
  5111         aLine.Append( _L("F ") );
       
  5112         }    
       
  5113             
       
  5114     }
       
  5115     
       
  5116 /*
       
  5117 -------------------------------------------------------------------------------
       
  5118 
       
  5119     Class: CStartedTestSetMenu
       
  5120 
       
  5121     Method: SelectL
       
  5122 
       
  5123     Description: Process keypresses in menu. Handle Enter and Right Arrow
       
  5124     here, other will be handled in CMenu::SelectL
       
  5125 
       
  5126     Parameters: TKeyCode aSelection       :in:      Key
       
  5127                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  5128 
       
  5129     Return Values: CMenu*                           New menu
       
  5130 
       
  5131     Errors/Exceptions: None
       
  5132 
       
  5133     Status: Draft
       
  5134 
       
  5135 -------------------------------------------------------------------------------
       
  5136 */
       
  5137 CMenu* CStartedTestSetMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  5138     {
       
  5139 
       
  5140     MapKeyCode(aSelection);
       
  5141     
       
  5142     switch (aSelection)
       
  5143         {
       
  5144         case EKeyEnter:
       
  5145         case EKeyRightArrow:
       
  5146             {
       
  5147             if ( iFirst + iPosOnScreen < iTestSets.Count() )
       
  5148                 {
       
  5149                 delete iCaseMenu;
       
  5150                 iCaseMenu = 0;
       
  5151                 iCaseMenu = CTestSetCaseMenu::NewL( 
       
  5152                     iMain, 
       
  5153                     this, 
       
  5154                     iTestSets[iFirst + iPosOnScreen].TestSetInfo().Name(), 
       
  5155                     iTestSets[iFirst + iPosOnScreen] ); 
       
  5156 
       
  5157                 return iCaseMenu;
       
  5158                 }
       
  5159             }
       
  5160             return this;
       
  5161         default:
       
  5162             break;
       
  5163         }   
       
  5164         
       
  5165     // Let the parent class handle rest
       
  5166     return CMenu::SelectL(aSelection, aContinue);
       
  5167     
       
  5168     }
       
  5169 
       
  5170 
       
  5171 /*
       
  5172 -------------------------------------------------------------------------------
       
  5173 
       
  5174     Class: CTestSetCaseMenu
       
  5175 
       
  5176     Method: NewL
       
  5177 
       
  5178     Description: Constructs new menu.
       
  5179 
       
  5180     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  5181                 CMenu* aParent            :in:      Parent menu
       
  5182                 const TDesC& aName        :in:      Menu name
       
  5183                 TCaseState aType          :in:      Case state
       
  5184 
       
  5185     Return Values: CMenu*                           New menu
       
  5186 
       
  5187     Errors/Exceptions: Leaves if memory allocation fails
       
  5188                        Leaves if ConstructL leaves.
       
  5189 
       
  5190     Status: Draft
       
  5191 
       
  5192 -------------------------------------------------------------------------------
       
  5193 */
       
  5194 CTestSetCaseMenu* CTestSetCaseMenu::NewL( CConsoleMain* aConsole, 
       
  5195                                           CMenu* aParent, 
       
  5196                                           const TDesC& aName,
       
  5197                                           CStartedTestSet& aTestSet  )
       
  5198     {
       
  5199 
       
  5200     CTestSetCaseMenu* self = new ( ELeave ) CTestSetCaseMenu( aTestSet );
       
  5201     CleanupStack::PushL( self );
       
  5202     self->ConstructL( aConsole, aParent, aName );
       
  5203     CleanupStack::Pop( self );
       
  5204     return self;
       
  5205 
       
  5206     }
       
  5207 
       
  5208 /*
       
  5209 -------------------------------------------------------------------------------
       
  5210 
       
  5211     Class: CTestSetCaseMenu
       
  5212 
       
  5213     Method: CTestSetCaseMenu
       
  5214 
       
  5215     Description: Constructor
       
  5216 
       
  5217     Parameters: None
       
  5218 
       
  5219     Return Values: None
       
  5220 
       
  5221     Errors/Exceptions: None
       
  5222 
       
  5223     Status: Draft
       
  5224 
       
  5225 -------------------------------------------------------------------------------
       
  5226 */
       
  5227 CTestSetCaseMenu::CTestSetCaseMenu( CStartedTestSet& aTestSet ):
       
  5228     iTestSet( aTestSet )
       
  5229     {
       
  5230     }
       
  5231     
       
  5232 /*
       
  5233 -------------------------------------------------------------------------------
       
  5234 
       
  5235     Class: CTestSetCaseMenu
       
  5236 
       
  5237     Method: ConstructL
       
  5238 
       
  5239     Description: Second level constructor.
       
  5240 
       
  5241     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  5242                 CMenu* aParent            :in:      Parent menu
       
  5243                 const TDesC& aName        :in:      Menu name
       
  5244                 TCaseState aType          :in:      Case state
       
  5245 
       
  5246     Return Values: None
       
  5247 
       
  5248     Errors/Exceptions: Leaves if parent class ConstructL leaves
       
  5249                        Leaves if memory allocation fails
       
  5250                        Leaves if CCaseOperation menu NewL leaves
       
  5251                        Leaves if UpcateCaseListL leaves
       
  5252 
       
  5253     Status: Draft
       
  5254 
       
  5255 -------------------------------------------------------------------------------
       
  5256 */
       
  5257 void CTestSetCaseMenu::ConstructL( CConsoleMain* aConsole, 
       
  5258                             CMenu* aParent, 
       
  5259                             const TDesC& aName )
       
  5260     {
       
  5261 
       
  5262     CCaseMenu::ConstructL( aConsole, aParent, aName, 
       
  5263                            CUIStoreIf::EStatusAll );
       
  5264 
       
  5265     }
       
  5266 
       
  5267 
       
  5268 
       
  5269 /*
       
  5270 -------------------------------------------------------------------------------
       
  5271 
       
  5272     Class: CTestSetCaseMenu
       
  5273 
       
  5274     Method: ~CTestSetCaseMenu
       
  5275 
       
  5276     Description: Destructor
       
  5277 
       
  5278     Parameters: None
       
  5279 
       
  5280     Return Values: None
       
  5281 
       
  5282     Errors/Exceptions: None
       
  5283 
       
  5284     Status: Draft
       
  5285     
       
  5286 -------------------------------------------------------------------------------
       
  5287 */
       
  5288 CTestSetCaseMenu::~CTestSetCaseMenu()
       
  5289     {
       
  5290     }
       
  5291 
       
  5292 
       
  5293 /*
       
  5294 -------------------------------------------------------------------------------
       
  5295 
       
  5296     Class: CTestSetCaseMenu
       
  5297 
       
  5298     Method: ItemText
       
  5299 
       
  5300     Description: Returns menu item text
       
  5301 
       
  5302     Parameters: const TInt                :in:      Menu index
       
  5303 
       
  5304     Return Values: const TDesC&                     Menu line text
       
  5305 
       
  5306     Errors/Exceptions: None
       
  5307 
       
  5308     Status: Draft
       
  5309 
       
  5310 -------------------------------------------------------------------------------
       
  5311 */
       
  5312 TInt CTestSetCaseMenu::ItemTexts( RRefArray<TDesC>& aArray )
       
  5313     {
       
  5314     
       
  5315     if ( iTestSet.Status() & CUIStoreIf::ESetRunning )
       
  5316         {
       
  5317         if( aArray.Append( KCancelTestSet ) != KErrNone )
       
  5318             {
       
  5319             return KErrNoMemory;
       
  5320             }
       
  5321         }
       
  5322     
       
  5323     const RRefArray<CStartedTestCase>& testCases = iTestSet.TestCases();
       
  5324         
       
  5325     iTestCases.Reset();
       
  5326     
       
  5327     TInt count = testCases.Count();
       
  5328     for( TInt i=0; i<count; i++ )
       
  5329         {
       
  5330         if( iTestCases.Append( testCases[i] ) != KErrNone )
       
  5331             {
       
  5332             return KErrNoMemory;
       
  5333             }  
       
  5334         if( aArray.Append( testCases[i].TestInfo().TestCaseTitle() ) != KErrNone )
       
  5335             {
       
  5336             return KErrNoMemory;
       
  5337             }   
       
  5338         }
       
  5339 
       
  5340     return KErrNone;
       
  5341     
       
  5342     }
       
  5343 
       
  5344 /*
       
  5345 -------------------------------------------------------------------------------
       
  5346     Class: CTestSetCaseMenu
       
  5347 
       
  5348     Method: AppendBefore
       
  5349 
       
  5350     Description: Append text before line.
       
  5351 
       
  5352     Parameters: TInt aLine: in: line number 
       
  5353                 TDes& aLine: in: line text
       
  5354 
       
  5355     Return Values: None
       
  5356 
       
  5357     Errors/Exceptions: None
       
  5358 
       
  5359     Status: Draft
       
  5360     
       
  5361 -------------------------------------------------------------------------------
       
  5362 */
       
  5363 void CTestSetCaseMenu::AppendBefore( TInt aLineNum, TDes& aLine )
       
  5364     {
       
  5365     
       
  5366     CMenu::AppendBefore( aLineNum, aLine );
       
  5367    
       
  5368     TInt testCaseNum = aLineNum; 
       
  5369     if( iTestSet.Status() & CUIStoreIf::ESetRunning ) 
       
  5370         {
       
  5371         if( aLineNum == 0 )
       
  5372             {
       
  5373             // "Cancel test set" row
       
  5374             return;
       
  5375             }
       
  5376         testCaseNum--;
       
  5377         }
       
  5378         
       
  5379     if( ( aLine.MaxLength() - aLine.Length() ) < 2 )
       
  5380         {
       
  5381         return;
       
  5382         }        
       
  5383     
       
  5384    if( iTestCases[testCaseNum].Status() & CUIStoreIf::EStatusRunning )
       
  5385         {
       
  5386         aLine.Append( _L("O ") );
       
  5387         }
       
  5388     else if( iTestCases[testCaseNum].Status() & CUIStoreIf::EStatusPassed )
       
  5389         {
       
  5390         aLine.Append( _L("P ") );
       
  5391         }
       
  5392     else if( iTestCases[testCaseNum].Status() & CUIStoreIf::EStatusFailed )
       
  5393         {
       
  5394         aLine.Append( _L("F ") );
       
  5395         }
       
  5396     else if( iTestCases[testCaseNum].Status() & CUIStoreIf::EStatusAborted )
       
  5397         {
       
  5398         aLine.Append( _L("A ") );
       
  5399         }
       
  5400     else if( iTestCases[testCaseNum].Status() & CUIStoreIf::EStatusCrashed )
       
  5401         {
       
  5402         aLine.Append( _L("C ") );
       
  5403         }
       
  5404 
       
  5405     }
       
  5406 
       
  5407 /*
       
  5408 -------------------------------------------------------------------------------
       
  5409 
       
  5410     Class: CTestSetCaseMenu
       
  5411 
       
  5412     Method: SelectL
       
  5413 
       
  5414     Description: Process keypresses in menu. Handle enter and right arrow here,
       
  5415     others in CMenu::SelectL.
       
  5416 
       
  5417     Parameters: TKeyCode aSelection       :in:      Key
       
  5418                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  5419 
       
  5420     Return Values: CMenu*                           New menu
       
  5421 
       
  5422     Errors/Exceptions: None
       
  5423 
       
  5424     Status: Draft
       
  5425 
       
  5426 -------------------------------------------------------------------------------
       
  5427 */
       
  5428 CMenu* CTestSetCaseMenu::SelectL( TKeyCode aSelection, TBool& aContinue )
       
  5429     {
       
  5430     
       
  5431     MapKeyCode(aSelection);
       
  5432 
       
  5433     if( ( aSelection == EKeyEnter ) || ( aSelection == EKeyRightArrow ) )
       
  5434         {
       
  5435         TInt pos = iFirst + iPosOnScreen; 
       
  5436         if( iTestSet.Status() & CUIStoreIf::ESetRunning )
       
  5437             {
       
  5438             pos--;
       
  5439             }               
       
  5440         if( pos == -1 )
       
  5441             {
       
  5442             User::LeaveIfError( 
       
  5443                 iMain->UIStore().AbortTestSet( iTestSet ) );
       
  5444             return iParent;             
       
  5445             }
       
  5446         else if( pos < iTestCases.Count() )
       
  5447             {
       
  5448             delete iCaseOperationMenu;
       
  5449             iCaseOperationMenu = 0;
       
  5450             iCaseOperationMenu = CCaseOperationMenu::NewL( 
       
  5451                 iMain, 
       
  5452                 this, 
       
  5453                 iTestCases[pos].TestInfo().TestCaseTitle(), 
       
  5454                 &iTestCases[pos] ); 
       
  5455 
       
  5456             return iCaseOperationMenu;
       
  5457             }
       
  5458         }
       
  5459 
       
  5460         // Let the parent class handle rest
       
  5461     return CMenu::SelectL(aSelection, aContinue);
       
  5462     }
       
  5463         
       
  5464 /*
       
  5465 -------------------------------------------------------------------------------
       
  5466 
       
  5467     Class: CFilterMenu
       
  5468 
       
  5469     Method: NewL
       
  5470 
       
  5471     Description: Constructs new menu.
       
  5472 
       
  5473     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  5474                 CMenu* aParent            :in:      Parent menu
       
  5475                 const TDesC& aName        :in:      Menu name
       
  5476 
       
  5477     Return Values: CMenu*                           New menu
       
  5478 
       
  5479     Errors/Exceptions: Leaves if memory allocation fails
       
  5480                        Leaves if ConstructL leaves.
       
  5481 
       
  5482     Status: Draft
       
  5483 
       
  5484 -------------------------------------------------------------------------------
       
  5485 */
       
  5486 CFilterMenu* CFilterMenu::NewL(CConsoleMain* aConsole,
       
  5487                                CMenu* aParent,
       
  5488                                const TDesC& aName)
       
  5489     {
       
  5490     CFilterMenu* self = new (ELeave) CFilterMenu();
       
  5491     CleanupStack::PushL(self);
       
  5492     self->ConstructL(aConsole, aParent, aName);
       
  5493     CleanupStack::Pop(self);
       
  5494     return self;
       
  5495     }
       
  5496 
       
  5497 /*
       
  5498 -------------------------------------------------------------------------------
       
  5499 
       
  5500     Class: CFilterMenu
       
  5501 
       
  5502     Method: ConstructL
       
  5503 
       
  5504     Description: Second level constructor.
       
  5505 
       
  5506     Parameters: CConsoleMain* aConsole    :in:      Pointer to main console
       
  5507                 CMenu* aParent            :in:      Parent menu
       
  5508                 const TDesC& aName        :in:      Menu name
       
  5509 
       
  5510     Return Values: None
       
  5511 
       
  5512     Errors/Exceptions: None
       
  5513 
       
  5514     Status: Draft
       
  5515 
       
  5516 -------------------------------------------------------------------------------
       
  5517 */
       
  5518 void CFilterMenu::ConstructL(CConsoleMain* aConsole,
       
  5519                              CMenu* aParent,
       
  5520                              const TDesC& aName
       
  5521                             )
       
  5522     {
       
  5523     CMenu::ConstructL(aConsole, aParent, aName);
       
  5524     }
       
  5525 
       
  5526 /*
       
  5527 -------------------------------------------------------------------------------
       
  5528 
       
  5529     CFilterMenu
       
  5530 
       
  5531     Method: CFilterMenu
       
  5532 
       
  5533     Description: Constructor
       
  5534 
       
  5535     Parameters: None
       
  5536 
       
  5537     Return Values: None
       
  5538 
       
  5539     Errors/Exceptions: None
       
  5540 
       
  5541     Status: Draft
       
  5542 
       
  5543 -------------------------------------------------------------------------------
       
  5544 */
       
  5545 CFilterMenu::CFilterMenu()
       
  5546     {
       
  5547     }
       
  5548     
       
  5549 /*
       
  5550 -------------------------------------------------------------------------------
       
  5551 
       
  5552     CFilterMenu
       
  5553 
       
  5554     Method: ~CFilterMenu
       
  5555 
       
  5556     Description: Destructor
       
  5557 
       
  5558     Parameters: None
       
  5559 
       
  5560     Return Values: None
       
  5561 
       
  5562     Errors/Exceptions: None
       
  5563 
       
  5564     Status: Draft
       
  5565 
       
  5566 -------------------------------------------------------------------------------
       
  5567 */
       
  5568 CFilterMenu::~CFilterMenu()
       
  5569     {
       
  5570     delete iTestCaseMenu;
       
  5571     }
       
  5572     
       
  5573 /*
       
  5574 -------------------------------------------------------------------------------
       
  5575 
       
  5576     Class: CFilterMenu
       
  5577 
       
  5578     Method: ItemText
       
  5579 
       
  5580     Description: Returns menu item text
       
  5581 
       
  5582     Parameters: const TInt                :in:      Menu index
       
  5583 
       
  5584     Return Values: const TDesC&                     Menu line text
       
  5585 
       
  5586     Errors/Exceptions: None
       
  5587 
       
  5588     Status: Draft
       
  5589 
       
  5590 -------------------------------------------------------------------------------
       
  5591 */
       
  5592 TInt CFilterMenu::ItemTexts(RRefArray<TDesC>& aArray)
       
  5593     {
       
  5594     const RPointerArray<TDesC> &filters = iMain->GetFilterArray();
       
  5595     TInt ret;
       
  5596     
       
  5597     TInt count = filters.Count();
       
  5598     for(TInt i = 0; i < count; i++)
       
  5599         {    
       
  5600         ret = aArray.Append(*filters[i]);
       
  5601         if(ret != KErrNone)
       
  5602             {
       
  5603             return ret;
       
  5604             }
       
  5605         }
       
  5606         
       
  5607     return KErrNone;
       
  5608     }
       
  5609 
       
  5610 /*
       
  5611 -------------------------------------------------------------------------------
       
  5612 
       
  5613     Class: CFilterMenu
       
  5614 
       
  5615     Method: SelectL
       
  5616 
       
  5617     Description: Process keypresses in menu. Handle enter and right arrow here,
       
  5618     others in CMenu::SelectL.
       
  5619 
       
  5620     Parameters: TKeyCode aSelection       :in:      Key
       
  5621                 TBool& aContinue          :out:     Has user pressed "Quit"
       
  5622 
       
  5623     Return Values: CMenu*                           New menu
       
  5624 
       
  5625     Errors/Exceptions: None
       
  5626 
       
  5627     Status: Draft
       
  5628 
       
  5629 -------------------------------------------------------------------------------
       
  5630 */
       
  5631 CMenu* CFilterMenu::SelectL(TKeyCode aSelection, TBool& aContinue)
       
  5632     {
       
  5633     const RPointerArray<TDesC> &filters = iMain->GetFilterArray();
       
  5634     
       
  5635     MapKeyCode(aSelection);
       
  5636     
       
  5637     switch ( aSelection )
       
  5638         {
       
  5639         case EKeyEnter:
       
  5640         case EKeyRightArrow:
       
  5641             {
       
  5642             // Start the case
       
  5643             if((iFirst + iPosOnScreen) < filters.Count())
       
  5644                 {
       
  5645                 // Show test cases menu
       
  5646                 iMain->SetFilterIndex(iFirst + iPosOnScreen);
       
  5647                 if(iTestCaseMenu)
       
  5648                     {
       
  5649                     return iTestCaseMenu;
       
  5650                     }
       
  5651                 else
       
  5652                     {
       
  5653                     RDebug::Print(_L("STIF: CFilterMenu::SelectL: test case menu is not set, however it should be"));
       
  5654                     return this;
       
  5655                     }
       
  5656                 }
       
  5657             else
       
  5658                 {
       
  5659                 return this;
       
  5660                 }
       
  5661             }
       
  5662 
       
  5663         default:
       
  5664             return CMenu::SelectL( aSelection, aContinue);
       
  5665         }
       
  5666     }
       
  5667     
       
  5668 /*
       
  5669 -------------------------------------------------------------------------------
       
  5670 
       
  5671     Class: CFilterMenu
       
  5672 
       
  5673     Method: SetTestCaseMenu
       
  5674 
       
  5675     Description: Set pointer to test case menu, so it can be shown when user
       
  5676                  selects filter.
       
  5677                  This menu will be deleted along with the filter menu.
       
  5678 
       
  5679     Parameters: CMenu* aTestCaseMenu      :in:      test case menu
       
  5680 
       
  5681     Return Values: None
       
  5682 
       
  5683     Errors/Exceptions: None
       
  5684 
       
  5685     Status: Draft
       
  5686 
       
  5687 -------------------------------------------------------------------------------
       
  5688 */
       
  5689 void CFilterMenu::SetTestCaseMenu(CMenu* aTestCaseMenu)
       
  5690     {
       
  5691     if(iTestCaseMenu)
       
  5692         {
       
  5693         RDebug::Print(_L("STIF: CFilterMenu::SetTestCaseMenu: test case menu is already set!"));
       
  5694         delete iTestCaseMenu;
       
  5695         iTestCaseMenu = NULL;
       
  5696         }
       
  5697     iTestCaseMenu = aTestCaseMenu;
       
  5698     }
       
  5699 
       
  5700 // End of File