diff -r 87e9ebfbe96a -r 404ad6c9bc20 stifui/avkon/stifui/src/TestSetMenuView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/stifui/avkon/stifui/src/TestSetMenuView.cpp Tue Apr 27 16:38:40 2010 +0300 @@ -0,0 +1,554 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: This file contains CTestSetMenuView class ddefinition. +* +*/ + +// INCLUDE FILES +#include +#include +#include +#include +#include //TResourceReader +#include +#include "TestSetMenuView.h" +#include "TestSetMenuContainer.h" +#include "AppUIAppUi.h" +#include "Stifui.hrh" + + + +// ================= MEMBER FUNCTIONS ========================================= +// ---------------------------------------------------------------------------- +// CTestSetMenuView::ConstructL +// +// Symbian OS two-phased constructor. +// ---------------------------------------------------------------------------- +// +void CTestSetMenuView::ConstructL() + { + CView::ConstructL(); + BaseConstructL( R_APPUI_TESTSETMENUVIEW ); + iCurrentTestCase = 0; + iSaveNeeded = ETrue; + iUIStore = ( (CAppUIAppUi*)iCoeEnv->AppUi() )->UIStoreHandler(); + } + +// ---------------------------------------------------------------------------- +// CTestSetMenuView::~CTestSetMenuView +// +// Destructor. +// ---------------------------------------------------------------------------- +// +CTestSetMenuView::~CTestSetMenuView() + { + if ( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + } + delete iNaviDecorator; + iNaviDecorator = NULL; + } + +// ---------------------------------------------------------------------------- +// CTestSetMenuView::Id +// +// Returns view´s id. +// ---------------------------------------------------------------------------- +// +TUid CTestSetMenuView::Id() const + { + return TUid::Uid(ETestSetMenuViewId); + } + +// ---------------------------------------------------------------------------- +// CTestSetMenuView::HandleCommandL +// +// Handles a command. +// ---------------------------------------------------------------------------- +// +void CTestSetMenuView::HandleCommandL(TInt aCommand) + { + if ( aCommand == EAknCmdMark || aCommand == EAknCmdUnmark + || aCommand == EAknMarkAll || aCommand == EAknUnmarkAll ) + { + iContainer->HandleMarkCommandL( aCommand ); + } + else + { + switch ( aCommand ) + { + case ECmdStartTestSet: + { + const CTestSetInfo& testSetInfo = + iUIStore->TestSetL( iCurrentTestSet ); + const RRefArray* allCases = + &testSetInfo.TestCases(); + + TInt testCaseCount = allCases->Count(); + if (testCaseCount > 0 ) + { + StartTestSetL(); + } + break; + } + case ECmdShowStartedTestSet: + { + AppUi()->HandleCommandL(ECmdShowStartedTestSet); + break; + } + case ECmdSaveTestSet: + { + SaveCurrentTestSetL(); + break; + } + case ECmdInsertTestCases: + { + // iSaveNeeded is set from + // CTestSetInsertMenuView::ShowInsertCasesDialog() + //iSaveNeeded = ETrue; + AppUi()->HandleCommandL(ECmdInsertTestCases); + break; + } + case ECmdRemoveTestCases: + { + RemoveSelectedTestCasesL(); + break; + } + case EAknSoftkeyBack: + { + //iCurrentTestCase = 0; + // AppUi()->HandleCommandL(ECmdLoadTestSet/*EAppUIGoToTestSetsMenu*/); + //( (CEikAppUi*)iCoeEnv->AppUi() )->HandleCommandL(EAppUIGoToTestSetsMenu); + SaveCurrentTestSetL(); + break; + } + default: + { + AppUi()->HandleCommandL( aCommand ); + break; + } + } + } + + } + +// ---------------------------------------------------------------------------- +// CTestSetMenuView::HandleClientRectChange +// +// Handles client rect changes. +// ---------------------------------------------------------------------------- +// +void CTestSetMenuView::HandleClientRectChange() + { + if ( iContainer ) + { + iContainer->SetRect( ClientRect() ); + } + } + +// ---------------------------------------------------------------------------- +// CTestSetMenuView::DoActivateL +// +// Initializes view when activated. +// ---------------------------------------------------------------------------- +// +void CTestSetMenuView::DoActivateL( + const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/) + { + if (!iContainer) + { + ((CAppUIAppUi*)AppUi())->iLogger->Log( + _L("TestSetMenuView: DoActivateL") ); + iContainer = new (ELeave) CTestSetMenuContainer; + iContainer->SetMopParent(this); + iContainer->ConstructL( ClientRect(), this ); + ((CAppUIAppUi*)AppUi())->iLogger->Log( + _L("TestSetMenuView: container constructed") ); + AppUi()->AddToStackL( *this, iContainer ); + } + + //testing + iContainer->SetCurrentItemIndex(iCurrentTestCase); + + CEikStatusPane* sp=iEikonEnv->AppUiFactory()->StatusPane(); + CAknNavigationControlContainer* np = + (CAknNavigationControlContainer *)sp->ControlL( + TUid::Uid(EEikStatusPaneUidNavi)); + + TResourceReader reader; + iCoeEnv->CreateResourceReaderLC(reader,R_NAVITITLE_TESTSET ); + iNaviDecorator = np->CreateNavigationLabelL( reader ); + CleanupStack::PopAndDestroy(); // resource reader + np->PushL(*iNaviDecorator); + + } + +// ---------------------------------------------------------------------------- +// CTestSetMenuView::DoDeactivate +// +// Deactivates view. +// ---------------------------------------------------------------------------- +// +void CTestSetMenuView::DoDeactivate() + { + if ( iContainer ) + { + iContainer->SaveActiveLine(); + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer = NULL; + } + delete iNaviDecorator; + iNaviDecorator = NULL; + } + + +// ---------------------------------------------------------------------------- +// CTestSetMenuView::DynInitMenuPaneL +// +// Initializes menu pane. +// ---------------------------------------------------------------------------- +// +void CTestSetMenuView::DynInitMenuPaneL( + TInt aResourceId, CEikMenuPane* aMenuPane) + { + + // Test modules are added to filter by test module submenu + // if the submenu is opened + if (R_APPUI_FILTERBYMODULES_MENU == aResourceId) + { + RRefArray modules; + TInt ret = iUIStore->Modules( modules ); + if( KErrNone != ret ) + { + modules.Reset(); + modules.Close(); + User::Leave( ret ); + } + + TInt moduleCount = modules.Count(); + + TInt i; + CEikMenuPaneItem::SData item; + + item.iCommandId = ECmdFilterByModule; + item.iFlags = 0; + item.iCascadeId = 0; + + for (i = 0; i < moduleCount; i++) + { + item.iText = modules[i]; + aMenuPane->AddMenuItemL(item); + item.iCommandId++; // Command IDs 0x1000 - 0x1FFF are reserved + // for modules in hrh file. + } + + modules.Reset(); + modules.Close(); + } + + // Test case files are added to filter by test case file submenu + // if the submenu is opened. + if (R_APPUI_FILTER_BY_TESTCASEFILE_MENU == aResourceId) + { + RRefArray testCaseFiles; + TInt ret = iUIStore->TestCaseFiles( testCaseFiles ); + if( KErrNone != ret ) + { + testCaseFiles.Reset(); + testCaseFiles.Close(); + User::Leave( ret ); + } + + TInt testCaseFileCount = testCaseFiles.Count(); + + TInt i; + CEikMenuPaneItem::SData item; + + item.iCommandId = ECmdFilterByTestCaseFile; + item.iFlags = 0; + item.iCascadeId = 0; + + for (i = 0; i < testCaseFileCount; i++) + { + item.iText = testCaseFiles[i]; + aMenuPane->AddMenuItemL(item); + item.iCommandId++; // Command IDs 0x2000 - 0x2FFF are reserved for + // test case files in hrh file. + } + } + + } + +// ---------------------------------------------------------------------------- +// CTestSetMenuView::HandleListBoxEventL +// +// Handles listbox events. +// ---------------------------------------------------------------------------- +// +void CTestSetMenuView::HandleListBoxEventL(CEikListBox* /*aListBox*/, + TListBoxEvent aEventType) + { + + if ( ( aEventType == EEventEnterKeyPressed ) || ( aEventType == EEventItemDoubleClicked ) ) + { + const CTestSetInfo& testSetInfo = + iUIStore->TestSetL( iCurrentTestSet ); + const RRefArray* allCases = &testSetInfo.TestCases(); + + TInt testCaseCount = allCases->Count(); + if (testCaseCount > 0 ) + { + StartTestSetL(); + } + } + } + +// ---------------------------------------------------------------------------- +// CTestSetMenuView::CreateTestSet +// +// Creates new test set. +// ---------------------------------------------------------------------------- +// +TInt CTestSetMenuView::CreateTestSetL( const TDesC& aTestSetName ) + { + TInt error = 0; + TBuf<100> message; + + _LIT(KPath, "c:\\TestFramework\\"); + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + TEntry entry; + // we check if the c:\testframework directory exists + // It is mandatory for this dir to exist if we want to save a test set. + // This dir must be localised on the C drive of the device + if(fs.Entry(KPath, entry) != KErrNone) + { // if the dir does not exist + TInt err = fs.MkDirAll(KPath); // we create it + if(err != KErrNone) + { // if of any reason it was impossible to create the dir - inform user about it + CAknInformationNote* note = new (ELeave) CAknInformationNote(ETrue); + note->ExecuteLD( _L("Could not create c:\\TestFramework dir!") ); + } + } + CleanupStack::PopAndDestroy(&fs); // close and remove RFs object + + error = iUIStore->LoadTestSet( aTestSetName ); + + // If testset is either active or already created and saved. + /* if ( KErrNone == error)// || KErrAlreadyExists == error ) + { + CEikonEnv::Static()->ReadResource( message, + R_OVERWRITE_TESTSET_QUESTION ); + CAknQueryDialog * dlg = + CAknQueryDialog::NewL(CAknQueryDialog::ENoTone); + // Confirm overwrite + if ( dlg->ExecuteLD( R_GENERAL_CONFIRMATION_DIALOG, message ) ) + { + error = iUIStore->RemoveTestSet( aTestSetName ); + error = iUIStore->CreateTestSet( aTestSetName ); + if ( error == KErrNone ) + { + iCurrentTestSet = aTestSetName; + iSaveNeeded = ETrue; + } + } + // Else load saved default test set + else + { + iSaveNeeded = EFalse; + iCurrentTestSet = aTestSetName; + error = KErrAlreadyExists; + } + } + else if ( KErrNotFound == error ) + { + error = iUIStore->CreateTestSet( aTestSetName ); + if ( KErrNone == error ) + { + iCurrentTestSet = aTestSetName; + iSaveNeeded = ETrue; + } + } + else if ( KErrPathNotFound == error ) + { + error = iUIStore->CreateTestSet( aTestSetName ); + iCurrentTestSet = aTestSetName; + iSaveNeeded = EFalse; + } + else + { + ((CAppUIAppUi*)AppUi())->iLogger->Log(_L("Test set creation fails with error: %d"), error ); + CAknInformationNote* informationNote = new (ELeave) CAknInformationNote(ETrue); + informationNote->ExecuteLD( _L("UNDEFINED ERROR!") ); + }*/ + + error = iUIStore->CreateTestSet( aTestSetName ); + iCurrentTestSet = aTestSetName; + iSaveNeeded = ETrue; + return error; + } + +// ---------------------------------------------------------------------------- +// CTestSetMenuView::LoadTestSetL +// +// Loads saved test set. +// ---------------------------------------------------------------------------- +// +TInt CTestSetMenuView::LoadTestSetL( const TDesC& aTestSetName ) + { + TInt error = 0; + TBuf<100> message; + error = iUIStore->LoadTestSet( aTestSetName ); + if ( KErrNone == error || KErrAlreadyExists == error ) + { + iCurrentTestSet = aTestSetName; + iSaveNeeded = EFalse; + } + else + { + CEikonEnv::Static()->ReadResource( message, + R_LOAD_TESTSET_FAILED ); + + CAknInformationNote* informationNote = new (ELeave) CAknInformationNote(ETrue); + informationNote->ExecuteLD(message); + } + + return error; + } + +// ---------------------------------------------------------------------------- +// CTestSetMenuView::SaveCurrentTestSet +// +// Saves current test set. +// ---------------------------------------------------------------------------- +// +TInt CTestSetMenuView::SaveCurrentTestSetL() + { + TInt error = 0; + TBuf<100> message; + + CEikonEnv::Static()->ReadResource( message, + R_SAVE_TESTSET_QUESTION ); + + CAknQueryDialog * dlg = + CAknQueryDialog::NewL(CAknQueryDialog::ENoTone); + + if ( dlg->ExecuteLD( R_GENERAL_CONFIRMATION_DIALOG, message ) ) + { + error = iUIStore->SaveTestSet2( iCurrentTestSet ); + iSaveNeeded = EFalse; + + } + AppUi()->HandleCommandL(EAppUIGoBack); + + return error; + } + +// ---------------------------------------------------------------------------- +// CTestSetMenuView::RemoveActiveTestSet +// +// Removes current test set. +// ---------------------------------------------------------------------------- +// +TInt CTestSetMenuView::RemoveActiveTestSet() + { + TInt error = 0; + + error = iUIStore->RemoveTestSet( iCurrentTestSet ); + + return error; + } + +// ---------------------------------------------------------------------------- +// CTestSetMenuView::StartTestSetL +// +// Shows confirmation dialog and verify if user really want to start test set. +// ---------------------------------------------------------------------------- +// +void CTestSetMenuView::StartTestSetL() + { + _LIT( KErrorStartingTestSet, + "TestSetMenuView: StartTestSetL() fails (%d)" ); + + TInt ret(KErrNone); + TInt index(0); + TInt selectedItem(0); + + // Default mode is parallel. + CStartedTestSet::TSetType mode = CStartedTestSet::ESetParallel; + + CAknListQueryDialog* startDialog = + new (ELeave) CAknListQueryDialog(&selectedItem); + + // Show confirmation dialog. + if ( startDialog->ExecuteLD(R_START_MULTIPLE_TESTCASES_LIST_QUERY) ) + { + index = ((CAppUIAppUi*)AppUi())->iStartedTestSet; + // Check mode + if ( 1 == selectedItem ) + { + mode = CStartedTestSet::ESetSequential; + } + + // Start test set cases. + ret = iUIStore->StartTestSet( + iUIStore->TestSetL( iCurrentTestSet ), index, mode ); + + if ( ret != KErrNone ) + { + ((CAppUIAppUi*)AppUi())->iStartedTestSet = -1; + ((CAppUIAppUi*)AppUi())->iLogger->Log( + KErrorStartingTestSet, ret ); + } + else + { + ((CAppUIAppUi*)AppUi())->iStartedTestSet = index; + } + } + + } + +// ---------------------------------------------------------------------------- +// CTestSetMenuView::RemoveSelectedTestCasesL +// +// Removes marked test cases from test set. +// ---------------------------------------------------------------------------- +// +void CTestSetMenuView::RemoveSelectedTestCasesL() + { + TInt positionToRemove(0); + + const CTestSetInfo& testSetInfo = iUIStore->TestSetL( iCurrentTestSet ); + const RRefArray* allCases = &testSetInfo.TestCases(); + CEikListBox* listBox = iContainer->ListBox(); + + iSaveNeeded = ETrue; + positionToRemove = listBox->CurrentItemIndex(); + // Remove selected test case from test set. + TInt ret = iUIStore->RemoveFromTestSet(iCurrentTestSet, allCases->operator[](positionToRemove)); + iContainer->RemoveListBoxItemL(positionToRemove); + + if( ret != KErrNone ) + { + RDebug::Print( _L("RemoveFromTestSet failed with value: %d"), ret ); + } + } + + +// End of File