stifui/stifui/src/TestSetMenuView.cpp
branchRCL_3
changeset 9 404ad6c9bc20
parent 8 87e9ebfbe96a
child 11 454d022d514b
equal deleted inserted replaced
8:87e9ebfbe96a 9:404ad6c9bc20
     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 file contains CTestSetMenuView class ddefinition.
       
    15 *
       
    16 */
       
    17 
       
    18 // INCLUDE FILES
       
    19 #include  <eikmenub.h>
       
    20 #include  <aknViewAppUi.h>
       
    21 #include  <aknlistquerydialog.h> 
       
    22 #include  <aknnotewrappers.h>
       
    23 #include  <barsread.h>              //TResourceReader
       
    24 #include  <Stifui.rsg>
       
    25 #include  "TestSetMenuView.h"
       
    26 #include  "TestSetMenuContainer.h"
       
    27 #include  "AppUIAppUi.h"
       
    28 #include  "Stifui.hrh" 
       
    29 
       
    30 
       
    31 
       
    32 // ================= MEMBER FUNCTIONS =========================================
       
    33 // ----------------------------------------------------------------------------
       
    34 // CTestSetMenuView::ConstructL
       
    35 // 
       
    36 // Symbian OS two-phased constructor.
       
    37 // ----------------------------------------------------------------------------
       
    38 //
       
    39 void CTestSetMenuView::ConstructL()
       
    40     {
       
    41     CView::ConstructL();
       
    42     BaseConstructL( R_APPUI_TESTSETMENUVIEW );
       
    43     iCurrentTestCase = 0;
       
    44     iSaveNeeded = ETrue;
       
    45     iUIStore = ( (CAppUIAppUi*)iCoeEnv->AppUi() )->UIStoreHandler();
       
    46     }
       
    47 
       
    48 // ----------------------------------------------------------------------------
       
    49 // CTestSetMenuView::~CTestSetMenuView
       
    50 // 
       
    51 // Destructor.
       
    52 // ----------------------------------------------------------------------------
       
    53 //
       
    54 CTestSetMenuView::~CTestSetMenuView()
       
    55     {
       
    56     if ( iContainer )
       
    57         {
       
    58         AppUi()->RemoveFromViewStack( *this, iContainer );
       
    59         delete iContainer;
       
    60         }
       
    61     delete iNaviDecorator;
       
    62     iNaviDecorator = NULL;
       
    63     }
       
    64 
       
    65 // ----------------------------------------------------------------------------
       
    66 // CTestSetMenuView::Id
       
    67 // 
       
    68 // Returns view´s id.
       
    69 // ----------------------------------------------------------------------------
       
    70 //
       
    71 TUid CTestSetMenuView::Id() const
       
    72     {
       
    73     return TUid::Uid(ETestSetMenuViewId);
       
    74     }
       
    75 
       
    76 // ----------------------------------------------------------------------------
       
    77 // CTestSetMenuView::HandleCommandL
       
    78 // 
       
    79 // Handles a command.
       
    80 // ----------------------------------------------------------------------------
       
    81 //
       
    82 void CTestSetMenuView::HandleCommandL(TInt aCommand)
       
    83     {   
       
    84     if ( aCommand == EAknCmdMark || aCommand == EAknCmdUnmark 
       
    85         || aCommand == EAknMarkAll || aCommand == EAknUnmarkAll )
       
    86         {
       
    87         iContainer->HandleMarkCommandL( aCommand );
       
    88         }
       
    89     else
       
    90         {
       
    91         switch ( aCommand )
       
    92             {
       
    93             case ECmdStartTestSet:
       
    94                 {
       
    95                 const CTestSetInfo& testSetInfo = 
       
    96                     iUIStore->TestSetL( iCurrentTestSet );
       
    97                 const RRefArray<const CTestInfo>* allCases = 
       
    98                     &testSetInfo.TestCases();
       
    99                 
       
   100                 TInt testCaseCount = allCases->Count();
       
   101                 if (testCaseCount > 0 )
       
   102                     {
       
   103                     StartTestSetL();
       
   104                     }
       
   105                 break;
       
   106                 }
       
   107             case ECmdShowStartedTestSet:
       
   108                 {
       
   109                 AppUi()->HandleCommandL(ECmdShowStartedTestSet);
       
   110                 break;
       
   111                 }
       
   112             case ECmdSaveTestSet:
       
   113                 {
       
   114                 SaveCurrentTestSetL();
       
   115                 break;
       
   116                 }
       
   117             case ECmdInsertTestCases:
       
   118                 {
       
   119                 // iSaveNeeded is set from 
       
   120                 // CTestSetInsertMenuView::ShowInsertCasesDialog()
       
   121                 //iSaveNeeded = ETrue;
       
   122                 AppUi()->HandleCommandL(ECmdInsertTestCases);
       
   123                 break;
       
   124                 }
       
   125             case ECmdRemoveTestCases:
       
   126                 {
       
   127                 RemoveSelectedTestCasesL();
       
   128                 break;
       
   129                 }
       
   130             case EAknSoftkeyBack:
       
   131                 {
       
   132                 //iCurrentTestCase = 0;
       
   133                // AppUi()->HandleCommandL(ECmdLoadTestSet/*EAppUIGoToTestSetsMenu*/);
       
   134                 //( (CEikAppUi*)iCoeEnv->AppUi() )->HandleCommandL(EAppUIGoToTestSetsMenu);
       
   135                 SaveCurrentTestSetL();
       
   136                 break;
       
   137                 }
       
   138             default:
       
   139                 {
       
   140                 AppUi()->HandleCommandL( aCommand );
       
   141                 break;
       
   142                 }
       
   143             }
       
   144         }
       
   145 
       
   146     }
       
   147 
       
   148 // ----------------------------------------------------------------------------
       
   149 // CTestSetMenuView::HandleClientRectChange
       
   150 // 
       
   151 // Handles client rect changes.
       
   152 // ----------------------------------------------------------------------------
       
   153 //
       
   154 void CTestSetMenuView::HandleClientRectChange()
       
   155     {
       
   156     if ( iContainer )
       
   157         {
       
   158         iContainer->SetRect( ClientRect() );
       
   159         }
       
   160     }
       
   161 
       
   162 // ----------------------------------------------------------------------------
       
   163 // CTestSetMenuView::DoActivateL
       
   164 // 
       
   165 // Initializes view when activated.
       
   166 // ----------------------------------------------------------------------------
       
   167 //
       
   168 void CTestSetMenuView::DoActivateL(
       
   169    const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/,
       
   170    const TDesC8& /*aCustomMessage*/)
       
   171     {
       
   172     if (!iContainer)
       
   173         {
       
   174         ((CAppUIAppUi*)AppUi())->iLogger->Log( 
       
   175             _L("TestSetMenuView: DoActivateL") );
       
   176         iContainer = new (ELeave) CTestSetMenuContainer;
       
   177         iContainer->SetMopParent(this);
       
   178         iContainer->ConstructL( ClientRect(), this );
       
   179         ((CAppUIAppUi*)AppUi())->iLogger->Log( 
       
   180             _L("TestSetMenuView: container constructed") );
       
   181         AppUi()->AddToStackL( *this, iContainer );
       
   182         }
       
   183    
       
   184     //testing
       
   185     iContainer->SetCurrentItemIndex(iCurrentTestCase);
       
   186     
       
   187     CEikStatusPane* sp=iEikonEnv->AppUiFactory()->StatusPane();
       
   188     CAknNavigationControlContainer* np = 
       
   189         (CAknNavigationControlContainer *)sp->ControlL(
       
   190         TUid::Uid(EEikStatusPaneUidNavi));
       
   191     
       
   192     TResourceReader reader;
       
   193     iCoeEnv->CreateResourceReaderLC(reader,R_NAVITITLE_TESTSET );
       
   194     iNaviDecorator = np->CreateNavigationLabelL( reader );
       
   195     CleanupStack::PopAndDestroy(); // resource reader
       
   196     np->PushL(*iNaviDecorator);
       
   197 
       
   198     }
       
   199 
       
   200 // ----------------------------------------------------------------------------
       
   201 // CTestSetMenuView::DoDeactivate
       
   202 // 
       
   203 // Deactivates view.
       
   204 // ----------------------------------------------------------------------------
       
   205 //
       
   206 void CTestSetMenuView::DoDeactivate()
       
   207     {
       
   208     if ( iContainer )
       
   209         {
       
   210         iContainer->SaveActiveLine();
       
   211         AppUi()->RemoveFromViewStack( *this, iContainer );
       
   212         delete iContainer;
       
   213         iContainer = NULL;
       
   214         }
       
   215     delete iNaviDecorator;
       
   216     iNaviDecorator = NULL;
       
   217     }
       
   218 
       
   219 
       
   220 // ----------------------------------------------------------------------------
       
   221 // CTestSetMenuView::DynInitMenuPaneL
       
   222 // 
       
   223 // Initializes menu pane.
       
   224 // ----------------------------------------------------------------------------
       
   225 //
       
   226 void CTestSetMenuView::DynInitMenuPaneL(
       
   227     TInt aResourceId, CEikMenuPane* aMenuPane)
       
   228     {
       
   229 
       
   230     // Test modules are added to filter by test module submenu 
       
   231     // if the submenu is opened
       
   232     if (R_APPUI_FILTERBYMODULES_MENU == aResourceId)
       
   233         {
       
   234         RRefArray<TDesC> modules;
       
   235         TInt ret = iUIStore->Modules( modules );
       
   236         if( KErrNone != ret )
       
   237             {
       
   238             modules.Reset();
       
   239             modules.Close();
       
   240             User::Leave( ret );
       
   241             }
       
   242 
       
   243         TInt moduleCount = modules.Count();
       
   244         
       
   245         TInt i;
       
   246         CEikMenuPaneItem::SData item;
       
   247 
       
   248         item.iCommandId = ECmdFilterByModule;
       
   249         item.iFlags = 0;
       
   250         item.iCascadeId = 0;
       
   251 
       
   252         for (i = 0; i < moduleCount; i++)
       
   253             {
       
   254             item.iText = modules[i];
       
   255             aMenuPane->AddMenuItemL(item);
       
   256             item.iCommandId++; // Command IDs 0x1000 - 0x1FFF are reserved
       
   257                                // for modules in hrh file.
       
   258             }
       
   259         
       
   260         modules.Reset();
       
   261         modules.Close();
       
   262         }
       
   263 
       
   264     // Test case files are added to filter by test case file submenu
       
   265     // if the submenu is opened.
       
   266     if (R_APPUI_FILTER_BY_TESTCASEFILE_MENU == aResourceId)
       
   267         {
       
   268         RRefArray<TDesC> testCaseFiles;
       
   269         TInt ret = iUIStore->TestCaseFiles( testCaseFiles );
       
   270         if( KErrNone != ret )
       
   271             {
       
   272             testCaseFiles.Reset();
       
   273             testCaseFiles.Close();
       
   274             User::Leave( ret );
       
   275             }
       
   276 
       
   277         TInt testCaseFileCount = testCaseFiles.Count();
       
   278 
       
   279         TInt i;
       
   280         CEikMenuPaneItem::SData item;
       
   281 
       
   282         item.iCommandId = ECmdFilterByTestCaseFile;
       
   283         item.iFlags = 0;
       
   284         item.iCascadeId = 0;
       
   285 
       
   286         for (i = 0; i < testCaseFileCount; i++)
       
   287             {
       
   288             item.iText = testCaseFiles[i];
       
   289             aMenuPane->AddMenuItemL(item);
       
   290             item.iCommandId++; // Command IDs 0x2000 - 0x2FFF are reserved for
       
   291                                // test case files in hrh file.
       
   292             }
       
   293         }
       
   294         
       
   295     }
       
   296 
       
   297 // ----------------------------------------------------------------------------
       
   298 // CTestSetMenuView::HandleListBoxEventL
       
   299 // 
       
   300 // Handles listbox events.
       
   301 // ----------------------------------------------------------------------------
       
   302 //
       
   303 void CTestSetMenuView::HandleListBoxEventL(CEikListBox* /*aListBox*/, 
       
   304     TListBoxEvent aEventType)
       
   305     {
       
   306 
       
   307     if ( ( aEventType == EEventEnterKeyPressed ) || ( aEventType == EEventItemDoubleClicked ) )
       
   308         {
       
   309         const CTestSetInfo& testSetInfo = 
       
   310             iUIStore->TestSetL( iCurrentTestSet );
       
   311         const RRefArray<const CTestInfo>* allCases = &testSetInfo.TestCases();
       
   312 
       
   313         TInt testCaseCount = allCases->Count();
       
   314            if (testCaseCount > 0 )
       
   315             {
       
   316             StartTestSetL();
       
   317             }
       
   318         }
       
   319    }
       
   320  
       
   321 // ----------------------------------------------------------------------------
       
   322 // CTestSetMenuView::CreateTestSet
       
   323 // 
       
   324 // Creates new test set.
       
   325 // ----------------------------------------------------------------------------
       
   326 //
       
   327 TInt CTestSetMenuView::CreateTestSetL( const TDesC& aTestSetName )
       
   328     {
       
   329     TInt error = 0;
       
   330     TBuf<100> message;
       
   331     
       
   332     _LIT(KPath, "c:\\TestFramework\\");
       
   333     RFs fs;
       
   334     User::LeaveIfError(fs.Connect());
       
   335     CleanupClosePushL(fs);
       
   336     TEntry entry;
       
   337     // we check if the c:\testframework directory exists
       
   338     // It is mandatory for this dir to exist if we want to save a test set.
       
   339     // This dir must be localised on the C drive of the device
       
   340     if(fs.Entry(KPath, entry) != KErrNone)
       
   341     	{	// if the dir does not exist 
       
   342     	TInt err = fs.MkDirAll(KPath);	// we create it
       
   343     	if(err != KErrNone)
       
   344     		{	// if of any reason it was impossible to create the dir - inform user about it
       
   345 	    	CAknInformationNote* note = new (ELeave) CAknInformationNote(ETrue);
       
   346 	    	note->ExecuteLD( _L("Could not create c:\\TestFramework dir!") );
       
   347     		}
       
   348     	}
       
   349     CleanupStack::PopAndDestroy(&fs);	// close and remove RFs object 
       
   350     
       
   351     error = iUIStore->LoadTestSet( aTestSetName );
       
   352     
       
   353     // If testset is either active or already created and saved.
       
   354  /*   if ( KErrNone == error)// || KErrAlreadyExists == error )
       
   355         {
       
   356         CEikonEnv::Static()->ReadResource( message, 
       
   357             R_OVERWRITE_TESTSET_QUESTION );
       
   358         CAknQueryDialog * dlg = 
       
   359             CAknQueryDialog::NewL(CAknQueryDialog::ENoTone);
       
   360         // Confirm overwrite
       
   361         if ( dlg->ExecuteLD( R_GENERAL_CONFIRMATION_DIALOG, message ) )
       
   362             {
       
   363             error = iUIStore->RemoveTestSet( aTestSetName );
       
   364             error = iUIStore->CreateTestSet( aTestSetName );
       
   365             if ( error == KErrNone )
       
   366                 {
       
   367                 iCurrentTestSet = aTestSetName;
       
   368                 iSaveNeeded = ETrue;
       
   369                 }
       
   370             }
       
   371         // Else load saved default test set
       
   372         else
       
   373             {
       
   374             iSaveNeeded = EFalse;
       
   375             iCurrentTestSet = aTestSetName;
       
   376             error = KErrAlreadyExists;
       
   377             }
       
   378         }
       
   379     else if ( KErrNotFound == error )
       
   380         {
       
   381         error = iUIStore->CreateTestSet( aTestSetName );
       
   382         if ( KErrNone == error )
       
   383             {
       
   384             iCurrentTestSet = aTestSetName;
       
   385             iSaveNeeded = ETrue;
       
   386             }
       
   387         }
       
   388     else if ( KErrPathNotFound == error )
       
   389           {
       
   390           error = iUIStore->CreateTestSet( aTestSetName );
       
   391           iCurrentTestSet = aTestSetName;
       
   392           iSaveNeeded = EFalse;
       
   393           }
       
   394     else
       
   395         {
       
   396         ((CAppUIAppUi*)AppUi())->iLogger->Log(_L("Test set creation fails with error: %d"), error );
       
   397         CAknInformationNote* informationNote = new (ELeave) CAknInformationNote(ETrue);
       
   398         informationNote->ExecuteLD( _L("UNDEFINED ERROR!") );
       
   399         }*/
       
   400     
       
   401     error = iUIStore->CreateTestSet( aTestSetName );
       
   402     iCurrentTestSet = aTestSetName;
       
   403     iSaveNeeded = ETrue;
       
   404     return error;
       
   405     }
       
   406 
       
   407 // ----------------------------------------------------------------------------
       
   408 // CTestSetMenuView::LoadTestSetL
       
   409 // 
       
   410 // Loads saved test set.
       
   411 // ----------------------------------------------------------------------------
       
   412 //
       
   413 TInt CTestSetMenuView::LoadTestSetL( const TDesC& aTestSetName )
       
   414     {
       
   415     TInt error = 0;
       
   416     TBuf<100> message;
       
   417     error = iUIStore->LoadTestSet( aTestSetName );
       
   418     if ( KErrNone == error || KErrAlreadyExists == error )
       
   419         {
       
   420         iCurrentTestSet = aTestSetName;
       
   421         iSaveNeeded = EFalse;
       
   422         }
       
   423     else
       
   424         {
       
   425         CEikonEnv::Static()->ReadResource( message, 
       
   426             R_LOAD_TESTSET_FAILED );
       
   427         
       
   428         CAknInformationNote* informationNote = new (ELeave) CAknInformationNote(ETrue);
       
   429         informationNote->ExecuteLD(message);
       
   430         }
       
   431     
       
   432     return error;
       
   433     }
       
   434 
       
   435 // ----------------------------------------------------------------------------
       
   436 // CTestSetMenuView::SaveCurrentTestSet
       
   437 // 
       
   438 // Saves current test set.
       
   439 // ----------------------------------------------------------------------------
       
   440 //
       
   441 TInt CTestSetMenuView::SaveCurrentTestSetL()
       
   442     {
       
   443     TInt error = 0;
       
   444     TBuf<100> message;
       
   445     
       
   446     CEikonEnv::Static()->ReadResource( message, 
       
   447         R_SAVE_TESTSET_QUESTION );
       
   448         
       
   449     CAknQueryDialog * dlg = 
       
   450         CAknQueryDialog::NewL(CAknQueryDialog::ENoTone);
       
   451     
       
   452    if ( dlg->ExecuteLD( R_GENERAL_CONFIRMATION_DIALOG, message ) )
       
   453        {
       
   454         error = iUIStore->SaveTestSet2( iCurrentTestSet );
       
   455         iSaveNeeded = EFalse;
       
   456         
       
   457       }
       
   458    AppUi()->HandleCommandL(EAppUIGoBack);
       
   459 
       
   460     return error;
       
   461     }
       
   462 
       
   463 // ----------------------------------------------------------------------------
       
   464 // CTestSetMenuView::RemoveActiveTestSet
       
   465 // 
       
   466 // Removes current test set.
       
   467 // ----------------------------------------------------------------------------
       
   468 //
       
   469 TInt CTestSetMenuView::RemoveActiveTestSet()
       
   470     {
       
   471     TInt error = 0;
       
   472     
       
   473     error = iUIStore->RemoveTestSet( iCurrentTestSet );
       
   474     
       
   475     return error;
       
   476     }
       
   477 
       
   478 // ----------------------------------------------------------------------------
       
   479 // CTestSetMenuView::StartTestSetL
       
   480 // 
       
   481 // Shows confirmation dialog and verify if user really want to start test set.
       
   482 // ----------------------------------------------------------------------------
       
   483 //
       
   484 void CTestSetMenuView::StartTestSetL()
       
   485     {
       
   486     _LIT( KErrorStartingTestSet, 
       
   487         "TestSetMenuView: StartTestSetL() fails (%d)" );
       
   488     
       
   489     TInt ret(KErrNone);
       
   490     TInt index(0);
       
   491     TInt selectedItem(0);
       
   492     
       
   493     // Default mode is parallel.
       
   494     CStartedTestSet::TSetType mode = CStartedTestSet::ESetParallel;
       
   495     
       
   496     CAknListQueryDialog* startDialog = 
       
   497         new (ELeave) CAknListQueryDialog(&selectedItem);
       
   498     
       
   499     // Show confirmation dialog.
       
   500     if ( startDialog->ExecuteLD(R_START_MULTIPLE_TESTCASES_LIST_QUERY) )
       
   501         {
       
   502         index = ((CAppUIAppUi*)AppUi())->iStartedTestSet;
       
   503         // Check mode
       
   504         if ( 1 == selectedItem )
       
   505             {
       
   506             mode = CStartedTestSet::ESetSequential;
       
   507             }
       
   508         
       
   509         // Start test set cases.
       
   510         ret = iUIStore->StartTestSet( 
       
   511             iUIStore->TestSetL( iCurrentTestSet ), index, mode );
       
   512             
       
   513         if ( ret != KErrNone )
       
   514             {
       
   515             ((CAppUIAppUi*)AppUi())->iStartedTestSet = -1;
       
   516             ((CAppUIAppUi*)AppUi())->iLogger->Log( 
       
   517                 KErrorStartingTestSet, ret );
       
   518             }
       
   519         else
       
   520             {
       
   521             ((CAppUIAppUi*)AppUi())->iStartedTestSet = index;
       
   522             }
       
   523         }
       
   524         
       
   525     }
       
   526    
       
   527 // ----------------------------------------------------------------------------
       
   528 // CTestSetMenuView::RemoveSelectedTestCasesL
       
   529 // 
       
   530 // Removes marked test cases from test set.
       
   531 // ----------------------------------------------------------------------------
       
   532 //
       
   533 void CTestSetMenuView::RemoveSelectedTestCasesL()
       
   534     {
       
   535     TInt positionToRemove(0);
       
   536     
       
   537     const CTestSetInfo& testSetInfo = iUIStore->TestSetL( iCurrentTestSet );
       
   538     const RRefArray<const CTestInfo>* allCases = &testSetInfo.TestCases();
       
   539     CEikListBox* listBox = iContainer->ListBox();
       
   540 
       
   541     iSaveNeeded = ETrue;
       
   542     positionToRemove = listBox->CurrentItemIndex();
       
   543     // Remove selected test case from test set.
       
   544     TInt ret = iUIStore->RemoveFromTestSet(iCurrentTestSet, allCases->operator[](positionToRemove));
       
   545     iContainer->RemoveListBoxItemL(positionToRemove);
       
   546     
       
   547     if( ret != KErrNone )
       
   548         {
       
   549         RDebug::Print( _L("RemoveFromTestSet failed with value: %d"), ret );
       
   550         }
       
   551     }
       
   552 
       
   553 
       
   554 // End of File