stifui/stifui/src/TestSetInsertMenuView.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Feb 2010 22:51:38 +0200
branchRCL_3
changeset 3 2703485a934c
parent 0 d6fe6244b863
permissions -rw-r--r--
Revision: 201003 Kit: 201007

/*
* 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 CTestSetInsertMenuView class
* definition.
*
*/

// INCLUDE FILES
#include  <eikmenub.h>
#include  <aknViewAppUi.h>
#include  <aknlistquerydialog.h> 
#include  <aknnotewrappers.h>
#include  <barsread.h>	//TResourceReader
#include  <Stifui.rsg>
#include  "TestSetInsertMenuView.h"
#include  "TestSetInsertMenuContainer.h"
#include  "TestSetMenuView.h"
#include  "AppUIAppUi.h"
#include  "Stifui.hrh" 


// ================= MEMBER FUNCTIONS =======================
// ----------------------------------------------------------------------------
// CTestSetInsertMenuView::ConstructL
// 
// Symbian OS two-phased constructor.
// ----------------------------------------------------------------------------
//
void CTestSetInsertMenuView::ConstructL()
    {
    CView::ConstructL();
    BaseConstructL(  R_INSERT_TESTCASES_VIEW );
    iCurrentTestCase = 0;

    }

// ----------------------------------------------------------------------------
// CTestSetInsertMenuView::~CTestSetInsertMenuView
// 
// Destructor.
// ----------------------------------------------------------------------------
//
CTestSetInsertMenuView::~CTestSetInsertMenuView()
    {
    if ( iContainer )
        {
        AppUi()->RemoveFromViewStack( *this, iContainer );
        delete iContainer;
        }
    delete iNaviDecorator;
    iNaviDecorator = NULL;
    }

// ----------------------------------------------------------------------------
// CTestSetInsertMenuView::Id
// 
// Returns view´s id.
// ----------------------------------------------------------------------------
//
TUid CTestSetInsertMenuView::Id() const
    {
    return TUid::Uid(ETestSetInsertMenuViewId);

    }

// ----------------------------------------------------------------------------
// CTestSetInsertMenuView::HandleCommandL
// 
// Handles a command.
// ----------------------------------------------------------------------------
//
void CTestSetInsertMenuView::HandleCommandL(TInt aCommand)
    {   
    if ( aCommand >= ECmdFilterByModule && aCommand < ECmdFilterByTestCaseFile ) // 0x1000 - 0x1FFF
        {
        TInt moduleNumber = aCommand - ECmdFilterByModule;
        RRefArray<TDesC> allModules;
        TInt ret = ((CAppUIAppUi*)AppUi())->UIStoreHandler()->Modules( allModules );
        if( KErrNone != ret )
            {
            allModules.Reset();
            allModules.Close();
            User::Leave( ret );
            }
        TName moduleName = allModules[ moduleNumber ];

        iContainer->FilterCasesByModuleL( moduleName );

        allModules.Reset();
        allModules.Close();
        }
	else if ( aCommand >= ECmdFilterByTestCaseFile && aCommand < ECmdNOFiltering )
        {
        TInt testCaseFileNumber = aCommand - ECmdFilterByTestCaseFile;
        RRefArray<TDesC> allTestCases;
        TInt ret = ((CAppUIAppUi*)AppUi())->UIStoreHandler()->TestCaseFiles( allTestCases );
        if( KErrNone != ret )
            {
            allTestCases.Reset();
            allTestCases.Close();
            User::Leave( ret );
            }
        TFileName testCaseFileName = allTestCases[ testCaseFileNumber ];

        iContainer->FilterCasesByTCFileNameL( testCaseFileName );

        allTestCases.Reset();
        allTestCases.Close();
        }
	else if ( aCommand == ECmdNOFiltering )
        {
        iContainer->NoFilteringL();
        }
    else if ( aCommand == EAknCmdMark || aCommand == EAknCmdUnmark 
    	|| aCommand == EAknMarkAll || aCommand == EAknUnmarkAll )
    	{
    	iContainer->HandleMarkCommandL( aCommand );
    	}
    else
	    {
 	    switch ( aCommand )
	        {
	        case ECmdInsertSelectedCases:
	            {
                ShowInsertCasesDialogL();
	            break;
	            }
	        case EAknSoftkeyCancel:
	            {
	            //iCurrentTestCase = 0;
	            ( (CEikAppUi*)iCoeEnv->AppUi() )->HandleCommandL(EAppUIGoToTestSetsMenu);
	            break;
	            }
	        default:
	            {
	            AppUi()->HandleCommandL( aCommand );
	            break;
	            }
	        }
	    }

    }

// ----------------------------------------------------------------------------
// CTestSetInsertMenuView::HandleClientRectChange
// 
// Handles client rect changes.
// ----------------------------------------------------------------------------
//
void CTestSetInsertMenuView::HandleClientRectChange()
    {
    if ( iContainer )
        {
        iContainer->SetRect( ClientRect() );
        }

    }

// ----------------------------------------------------------------------------
// CTestSetInsertMenuView::DoActivateL
// 
// Initializes view when activated.
// ----------------------------------------------------------------------------
//
void CTestSetInsertMenuView::DoActivateL(
   const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/,
   const TDesC8& /*aCustomMessage*/)
    {
    if (!iContainer)
        {
           ((CAppUIAppUi*)AppUi())->iLogger->Log(_L("TestSetInsertMenuView: DoActivateL"));
        //message = _L("eng.open ret:");
        //message.AppendNum( ret , EDecimal );
        //AppUi()->iLogger->Log( message );
        iContainer = new (ELeave) CTestSetInsertMenuContainer;
        iContainer->SetMopParent(this);
        iContainer->ConstructL( ClientRect(), this );
           ((CAppUIAppUi*)AppUi())->iLogger->Log(_L("TestSetInsertMenuView: 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_INSERT);
	iNaviDecorator = np->CreateNavigationLabelL( reader );
	CleanupStack::PopAndDestroy(); // resource reader
	np->PushL(*iNaviDecorator);
    }

// ----------------------------------------------------------------------------
// CTestSetInsertMenuView::DoDeactivate
// 
// Deactivates view.
// ----------------------------------------------------------------------------
//
void CTestSetInsertMenuView::DoDeactivate()
    {
    if ( iContainer )
        {
        iContainer->SaveActiveLine();
        AppUi()->RemoveFromViewStack( *this, iContainer );
        delete iContainer;
        iContainer = NULL;
        }
    delete iNaviDecorator;
    iNaviDecorator = NULL;
    }

// ----------------------------------------------------------------------------
// CTestSetInsertMenuView::DynInitMenuPaneL
// 
// Initializes menu pane.
// ----------------------------------------------------------------------------
//
void CTestSetInsertMenuView::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<TDesC> modules;
        TInt ret = ((CAppUIAppUi*)AppUi())->UIStoreHandler()->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].iModuleName;
            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<TDesC> testCaseFiles;
        TInt ret = ((CAppUIAppUi*)AppUi())->UIStoreHandler()->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
            }
        }

    }

// ----------------------------------------------------------------------------
// CTestSetInsertMenuView::HandleListBoxEventL
// 
// Handles listbox events.
// ----------------------------------------------------------------------------
//
void CTestSetInsertMenuView::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aEventType)
	{

	if ( ( aEventType == EEventEnterKeyPressed ) || ( aEventType == EEventItemDoubleClicked ) )
		{
        ShowInsertCasesDialogL();
		}
		
	}

// ----------------------------------------------------------------------------
// CTestSetInsertMenuView::ShowInsertCasesDialogL
// 
// Show confirmation dialog for inserting test cases.
// ----------------------------------------------------------------------------
//
void CTestSetInsertMenuView::ShowInsertCasesDialogL()
    {
    TInt i(0);
    TBuf<50> message;
    CEikListBox* listBox = iContainer->ListBox();
	TInt count = listBox->SelectionIndexes()->Count();
	
	if ( count > 0 )
	    {
    	CEikonEnv::Static()->ReadResource( message, R_INSERT_CONFIRMATION_QUESTION );
    		
    	CAknQueryDialog * dlg = CAknQueryDialog::NewL(CAknQueryDialog::ENoTone);
    	if ( dlg->ExecuteLD( R_GENERAL_CONFIRMATION_DIALOG, message ) )
    		{
    		CEikListBox* newListBox = iContainer->ListBox();
		    TInt newCount = newListBox->SelectionIndexes()->Count();
    		RArray<TInt> selectedIndices;
		    CleanupClosePushL( selectedIndices );
		    if ( newCount > 0 )
    			{
    			for( i = 0; i < newCount; i++ )
	    			{
    				selectedIndices.InsertInOrder( (*newListBox->SelectionIndexes())[i] );
		    		}	
    				
	    		AddCasesToTestSet( selectedIndices );
	    		// Test cases added, set save needed flag to true.
		    	((CTestSetMenuView*)AppUi()->View( 
		    	    TUid::Uid(ETestSetMenuViewId) ))->SetSaveNeeded(ETrue);
			    }
    		CleanupStack::PopAndDestroy();
	    	
		    // Test cases added -> go to test set menu
    		AppUi()->HandleCommandL(EAppUIGoBack);
	    	}
	    }
	else
	    {
	    CAknWarningNote* dialog = new(ELeave)CAknWarningNote();
	    CEikonEnv::Static()->ReadResource( message, R_INSERT_NOCASES_TEXT );
	    dialog->ExecuteLD(message);
	    }
	    
    }

// ----------------------------------------------------------------------------
// CTestSetInsertMenuView::AddCasesToTestSet
// 
// Adds selected test cases to the current test set.
// ----------------------------------------------------------------------------
//
void CTestSetInsertMenuView::AddCasesToTestSet( RArray<TInt> aSelectedIndexes )
	{
	TInt ret(0);
	TInt i(0);
	RRefArray<CTestInfo> allCases;
	CTestSetMenuView* testSetMenuView = 
    	(CTestSetMenuView*)((CAppUIAppUi*)AppUi())->View( TUid::Uid(ETestSetMenuViewId) );

	ret = ((CAppUIAppUi*)AppUi())->UIStoreHandler()->TestCases(allCases);
    
	for ( i = 0; i < aSelectedIndexes.Count(); i++ )
		{
		ret = ((CAppUIAppUi*)AppUi())->UIStoreHandler()->AddToTestSet( 
    		testSetMenuView->CurrentTestSet(),
   			allCases[ aSelectedIndexes[i] ] );
		}    
    if( ret != KErrNone )		
        {
        RDebug::Print( _L("AddCasesToTestSet failed with value: %d"), ret );
        }
    
	allCases.Reset();
	allCases.Close();

	}

// End of File