stifui/stifui/src/AppUIAppUi.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 00:17:27 +0200
changeset 0 d6fe6244b863
child 5 685c7418c584
permissions -rw-r--r--
Revision: 201003 Kit: 201005

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

// INCLUDE FILES
#include "AppUIAppUi.h"

#include "MainMenuView.h"
#include "TestCaseMenuView.h"
#include "StartCasesView.h"
#include "TestModulesMenuView.h"
#include "StartedCasesMenuView.h"
#include "ShowStartedCasesView.h"
#include "TestCaseOutputView.h"
#include "StatisticsView.h"
#include "TestSetBaseMenuView.h"
#include "TestSetMenuView.h"
#include "TestSetInsertMenuView.h"
#include "TestSetStartedCasesView.h"
#include <aknmessagequerydialog.h> 
#include "version.h"

#include "CreatedTestSetMenuView.h"

#include <Stifui.rsg>
#include "Stifui.hrh"


#include <StifTestInterface.h>

#include <aknnotewrappers.h>
#include <stringloader.h>

_LIT( KTestSet, "DefaultSet" );

static const TInt KCopyrightChar = 169;

// ----------------------------------------------------------
// CMessageBoxUtil::ShowNotImplementedYetL
// Displays message that executed funtion is not implemented yet.
// ----------------------------------------------------------
//
void TMessageBoxUtil::ShowNotImplementedYetL()
    {
    _LIT(message, "Not implemented yet");
    CAknInformationNote* informationNote = new (ELeave) CAknInformationNote;
    informationNote->ExecuteLD(message);
    }

// ----------------------------------------------------------
// Display error note.
// @param aMessage Error message to display.
// ----------------------------------------------------------
//
void TMessageBoxUtil::ShowErrorNoteL( const TDesC& aMessage )
	{
	CAknErrorNote* errorNote = new (ELeave) CAknErrorNote(ETrue);
	// set timeout to 5 sec	
	errorNote->SetTimeout( (CAknNoteDialog::TTimeout)5000000 );
	errorNote->ExecuteLD( aMessage );
	}

// ================= MEMBER FUNCTIONS =======================
//
// ----------------------------------------------------------
// CAppUIAppUi::ConstructL()
// ?implementation_description
// ----------------------------------------------------------
//
void CAppUIAppUi::ConstructL()
    {
    TInt error(0);

    BaseConstructL( EAknEnableSkin );

    // connection to setting server needs to be open as long as STIF Series 60 UI APP is alive
    TInt ret = iSettingServer.Connect();
    if ( ret != KErrNone )
        {
        User::Leave( ret );
        }
    
    iLogger = CStifLogger::NewL( _L("E\x3a\\"), _L("stif_tfw_ui"),
                                CStifLogger::ETxt, CStifLogger::EFile,
                                ETrue, EFalse, ETrue, EFalse, EFalse );

    iLogger->Log( _L("--- UI log starts ---") );
    iLogger->Log( _L(" ") );
    iLogger->Log( _L("appui: ConstructL") );

	// Create CData object which handles all test cases data and running of them
    iUIStoreHandler = CUIStoreHandler::NewL( this );
    
    // CUIStore open 
    error = UIStoreHandler()->Open( KDefaultPathAndIni );
    if ( KErrNone != error )
    	{
    	User::Leave( error );
    	}

    CMainMenuView* mainMenuView = new (ELeave) CMainMenuView;
    CleanupStack::PushL( mainMenuView );
    mainMenuView->ConstructL();
    AddViewL( mainMenuView );      // transfer ownership to CAknViewAppUi
    CleanupStack::Pop();    // MainMenuView

    iLogger->Log(_L("appui:mainview "));

    CCreatedTestSetMenuView* testCreatedTestSetMenuView = new (ELeave) CCreatedTestSetMenuView;
        CleanupStack::PushL( testCreatedTestSetMenuView );
       testCreatedTestSetMenuView->ConstructL();
        AddViewL( testCreatedTestSetMenuView );      // transfer ownership to CAknViewAppUi
        CleanupStack::Pop();    // testCaseMenuView
    CTestCaseMenuView* testCaseMenuView = new (ELeave) CTestCaseMenuView;
    CleanupStack::PushL( testCaseMenuView );
    testCaseMenuView->ConstructL();
    AddViewL( testCaseMenuView );      // transfer ownership to CAknViewAppUi
    CleanupStack::Pop();    // testCaseMenuView

    iLogger->Log(_L("appui:caseview "));

    CStartCasesView* startCasesView = new (ELeave) CStartCasesView;
    CleanupStack::PushL( startCasesView );
    startCasesView->ConstructL();
    AddViewL( startCasesView );      // transfer ownership to CAknViewAppUi
    CleanupStack::Pop();    // startCasesView

    iLogger->Log(_L("appui:startcaseview "));

    CStartedCasesMenuView* startedCasesMenuView = new (ELeave) CStartedCasesMenuView;
    CleanupStack::PushL( startedCasesMenuView );
    startedCasesMenuView->ConstructL();
    AddViewL( startedCasesMenuView );      // transfer ownership to CAknViewAppUi
    CleanupStack::Pop();    // startedCasesMenuView

    iLogger->Log(_L("appui:started cases view created"));

    CShowStartedCasesView* showStartedCasesView = new (ELeave) CShowStartedCasesView;
    CleanupStack::PushL( showStartedCasesView );
    showStartedCasesView->ConstructL();
    AddViewL( showStartedCasesView );      // transfer ownership to CAknViewAppUi
    CleanupStack::Pop();    // showStartedCasesView

    iLogger->Log(_L("appui: show started cases view created"));

    CTestCaseOutputView* testCaseOutputView = new (ELeave) CTestCaseOutputView;
    CleanupStack::PushL( testCaseOutputView );
    testCaseOutputView->ConstructL();
    AddViewL( testCaseOutputView );      // transfer ownership to CAknViewAppUi
    CleanupStack::Pop();    // testCaseOutputView

    iLogger->Log(_L("appui: test case output view created"));

    CTestModulesMenuView* testModulesMenuView = new (ELeave) CTestModulesMenuView;
    CleanupStack::PushL( testModulesMenuView );
    testModulesMenuView->ConstructL();
    AddViewL( testModulesMenuView );      // transfer ownership to CAknViewAppUi
    CleanupStack::Pop();    // testModulesMenuView

    iLogger->Log(_L("appui:modulesview "));

    CStatisticsView* statisticsMenuView = new (ELeave) CStatisticsView;
    CleanupStack::PushL( statisticsMenuView );
    statisticsMenuView->ConstructL();
    AddViewL( statisticsMenuView );      // transfer ownership to CAknViewAppUi
    CleanupStack::Pop();    // statisticsMenuView

    iLogger->Log(_L("appui:modulesview "));

	//
	CTestSetBaseMenuView* testSetBaseMenuView = new (ELeave) CTestSetBaseMenuView;
    CleanupStack::PushL( testSetBaseMenuView );
    testSetBaseMenuView->ConstructL();
    AddViewL( testSetBaseMenuView );      // transfer ownership to CAknViewAppUi
    CleanupStack::Pop();    // testSetBaseMenuView

    iLogger->Log(_L("appui:testsetsbaseview "));
    
    CTestSetMenuView* testSetMenuView = new (ELeave) CTestSetMenuView;
    CleanupStack::PushL( testSetMenuView );
    testSetMenuView->ConstructL();
    AddViewL( testSetMenuView );      // transfer ownership to CAknViewAppUi
    CleanupStack::Pop();    // testSetMenuView

    iLogger->Log(_L("appui:testsetsview "));
	
	CTestSetInsertMenuView* testSetInsertMenuView = new (ELeave) CTestSetInsertMenuView;
    CleanupStack::PushL( testSetInsertMenuView );
    testSetInsertMenuView->ConstructL();
    AddViewL( testSetInsertMenuView );      // transfer ownership to CAknViewAppUi
    CleanupStack::Pop();    // testSetInsertMenuView
   	
   	iLogger->Log(_L("appui:testsetinsertview "));
   	
   	CTestSetStartedCasesView* testSetStartedCasesView = new (ELeave) CTestSetStartedCasesView;
    CleanupStack::PushL( testSetStartedCasesView );
    testSetStartedCasesView->ConstructL();
    AddViewL( testSetStartedCasesView );      // transfer ownership to CAknViewAppUi
    CleanupStack::Pop();    // testSetStartedCasesView

    iLogger->Log(_L("appui:testsetStartedCasesView "));
    

    SetDefaultViewL( *mainMenuView );

    iLogger->Log(_L("appui:setdefview "));
    
    iStartedTestCase = NULL;
    iStartedTestSet = -1;
    
    iPreviousPositionListValid = ETrue;
    }

// ----------------------------------------------------
// CAppUIAppUi::~CAppUIAppUi()
// Destructor
// Frees reserved resources
// ----------------------------------------------------
//
CAppUIAppUi::~CAppUIAppUi()
    {
    
    if ( iLogger )
    {
    iLogger->Log( _L(" ") );
    iLogger->Log( _L("--- UI log ends ---") );    	
    }

    delete iLogger;
    iSettingServer.Close();
    UIStoreHandler()->Close();
    delete iUIStoreHandler;
    
    // Closing of array of positions of focus in various menus
    iPreviousFocusPosition.Close();
    // iPreviousFocusPosition is no longer valid and cannot be used any more
    iPreviousPositionListValid = EFalse;
    //RemoveView(EMainMenuViewId);
    }

// ------------------------------------------------------------------------------
// CAppUIAppUi::Data( )
// Just returns pointer to CUIStore object, which is created by CAppUIAppUi
// ------------------------------------------------------------------------------
//
CUIStore* CAppUIAppUi::UIStoreHandler()
    {
    return &iUIStoreHandler->UIStore();

    }

// ------------------------------------------------------------------------------
// CAppUIAppUi::::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
//  This function is called by the EIKON framework just before it displays
//  a menu pane. Its default implementation is empty, and by overriding it,
//  the application can set the state of menu items dynamically according
//  to the state of application data.
// ------------------------------------------------------------------------------
//
void CAppUIAppUi::DynInitMenuPaneL(
    TInt /*aResourceId*/,CEikMenuPane* /*aMenuPane*/)
    {

    }

// ----------------------------------------------------
// CAppUIAppUi::HandleKeyEventL(
//     const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
// ?implementation_description
// ----------------------------------------------------
//
TKeyResponse CAppUIAppUi::HandleKeyEventL(
    const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
    {
	TInt currentView;

	if ( iView )
	{
    currentView = (iView->Id()).iUid;
 			
    
    switch ( aKeyEvent.iCode )
        {
        case EKeyLeftArrow:
			{
			switch ( currentView )
				{
				case ETestModulesMenuViewId:
					{
                    HandleCommandL( EAppUIGoToTestCaseMenu );
					break;
					}
				case ETestSetBaseMenuViewId:
					{
                    HandleCommandL( EAppUIGoToModulesMenu );
					ActivateLocalViewL(TUid::Uid(ETestModulesMenuViewId));
					break;
					}
                }
            break;
			}
        case EKeyRightArrow:
			{
			switch ( currentView )
				{
				case ETestCaseMenuViewId:
					{
                    HandleCommandL( EAppUIGoToModulesMenu ); // TestCaseMenu --> TestModuleMenu
					ActivateLocalViewL(TUid::Uid(ETestModulesMenuViewId));
					break;
					}
				case ETestModulesMenuViewId:
					{
					HandleCommandL( EAppUIGoToTestSetsMenu );
					ActivateLocalViewL(TUid::Uid(ETestSetBaseMenuViewId));
					break;
					}
				case ETestSetsMenuViewId:
					{
					break;
					}

				}
            break;
			}

        default:
			{
            return EKeyWasNotConsumed;
            //break; 
			}
        }
	}

    return EKeyWasConsumed;

    }

// ----------------------------------------------------
// CAppUIAppUi::HandleCommandL(TInt aCommand)
// ?implementation_description
// ----------------------------------------------------
//
void CAppUIAppUi::HandleCommandL(TInt aCommand)
    {
	TInt currentView, newView;
    TInt error(0);
    
    currentView = (iView->Id()).iUid;

    switch ( aCommand )
        {
        case EEikCmdExit:
        case EAknSoftkeyExit:
            {
            PrepareToExit();
            Exit();
			newView = currentView;
            break;
            }
        case EAppUIGoBack:
            {
			switch ( currentView )
				{
				case ETestCaseMenuViewId:
					{
					newView = EMainMenuViewId;  // Test Cases Menu --> Main Menu
					break;
					}
				case EStartCaseMenuViewId:
					{
					newView = ETestCaseMenuViewId; // Start Cases Menu --> Test Cases Menu
                    //iTabGroup->SetActiveTabByIndex(0);
					break;
					}
				case ETestModulesMenuViewId:
					{
					newView = EMainMenuViewId; // Test Modules Menu --> Main Menu
					break;
					}
				case EStartedCasesMenuViewId:
					{
					newView = ETestCaseMenuViewId; // Started Cases Menu --> Test Case Menu
					break;
					}
				case EShowStartedCasesViewId:
					{
					newView = EStartedCasesMenuViewId; // Show started cases --> Started Cases Menu
					break;
					}
				case ETestCaseOutputViewId:
					{
                    newView = iPreviousView; // Test case output view --> previous view
					break;
					}
				case EStatisticsViewId:
					{
                    newView = EStartedCasesMenuViewId; // Statistic view --> Started Cases Menu
					break;
					}
				case ETestSetBaseMenuViewId:
					{
					newView = EMainMenuViewId;  // Test Sets Base Menu --> Main Menu
					break;
					}
				case ETestSetMenuViewId:
					{
					newView = ETestSetBaseMenuViewId;  // Test Sets Menu --> Test Sets Base Menu
					break;
					}
				case ETestSetInsertMenuViewId:
					{
					newView = ETestSetMenuViewId;  // Test Set Insert Menu --> Test Sets Menu
					break;
					}
				case ETestSetStartedCasesViewId:
					{
					newView = ETestSetMenuViewId;  // Test Set Started Cases Menu --> Test Sets Menu
					break;
					}
				default:
					{
					newView = currentView; // Back does not work. This should not happen ever
					break;
					}
				}
            break;
			}
		case EAppUIGoToMainMenu:
			{
			newView = EMainMenuViewId;
			break;
			}
		case EAppUIGoToTestCaseMenu:
			{
			newView = ETestCaseMenuViewId;
			break;
			}
		case ECmdGoToStartCasesView:
			{
			newView = EStartCaseMenuViewId;
			break;
			}
		case ECmdGoToStartedCasesView:
			{
			newView = EStartedCasesMenuViewId;
			break;
			}
		case EAppUIGoToModulesMenu:
			{
			newView = ETestModulesMenuViewId;
            //iTabGroup->SetActiveTabByIndex(1);
			break;
			}
		case EAppUIGoToTestSetsMenu:
			{
            newView = ETestSetBaseMenuViewId;
            
            //ShowNotImplementedYet();
            //newView = currentView;
			break;
			}
        case ECmdCreateTestSet:
	        {
	        CTestSetMenuView* testSetMenu = (CTestSetMenuView*)View( TUid::Uid(ETestSetMenuViewId) );
	        error = testSetMenu->CreateTestSetL( KTestSet );
	        if ( KErrNone == error ||  KErrAlreadyExists == error)
	            {
	            newView = ETestSetInsertMenuViewId;
	            currentView = ETestSetMenuViewId; // Store previous view for Back function
	            }
	        else
	            {
	            newView = ETestSetMenuViewId;
	            }
            break;
    	    }
    	case ECmdLoadTestSet:
	        {
	        newView = ECreatedTestSetMenuViewId; /*ETestSetBaseMenuViewId;*/
	        break;
			}
    	case ECmdGoToTestSetView:
    		{

    		newView = ETestSetMenuViewId; 
    		break;
    		}
        case ECmdInsertTestCases:
	        {
    		newView = ETestSetInsertMenuViewId;
    		break;
        	}
        case ECmdShowStartedTestSet:
	        {
    		newView = ETestSetStartedCasesViewId;
    		iShowStartedCasesMode = EShowAllStartedCases;
    		break;
        	}
        case ECmdShowAllStartedCases:
            newView = EShowStartedCasesViewId;
            iShowStartedCasesMode = EShowAllStartedCases;
			break;
        case ECmdShowOngoingCases:
            newView = EShowStartedCasesViewId;
            iShowStartedCasesMode = EShowOngoingCases;
        	break;
        case ECmdShowPassedCases:
            newView = EShowStartedCasesViewId;
            iShowStartedCasesMode = EShowPassedCases;
			break;
        case ECmdShowPausedCases:
            newView = EShowStartedCasesViewId;
            iShowStartedCasesMode = EShowPausedCases;
			break;
        case ECmdShowFailedCases:
            newView = EShowStartedCasesViewId;
            iShowStartedCasesMode = EShowFailedCases;
			break;
        case ECmdShowCrashedAbortedCases:
            newView = EShowStartedCasesViewId;
            iShowStartedCasesMode = EShowCrashedAbortedCases;
			break;
        case ECmdShowStatistics:
            newView = EStatisticsViewId;
			break;
        case ECmdViewOutput:
            newView = ETestCaseOutputViewId;
            break;
        case ECmdShowAbout:
        	{
        	CAknMessageQueryDialog* dlg = new (ELeave) CAknMessageQueryDialog;
        	TBuf<200> version;
        	version.Format(_L("STIF UI - Version %d.%d.%d - "), STIFUI_MAJOR_VERSION, STIFUI_MINOR_VERSION, STIFUI_BUILD_VERSION);
        	version.Append(TO_UNICODE(STIFUI_REL_DATE));
        	version.Append(_L("\n"));
        	
        	TInt stifMajorV;
        	TInt stifMinorV;
        	TInt stifBuildV;
        	TBuf<30> relDate;
        	TStifUtil::STIFVersion(stifMajorV, stifMinorV, stifBuildV, relDate);
        	
        	TBuf<40> stifVersion;
        	stifVersion.Format(_L("STIF - Version %d.%d.%d - "), stifMajorV, stifMinorV, stifBuildV);
        	stifVersion.Append(relDate);
        	stifVersion.Append(_L("\n"));
        	
        	version.Append(stifVersion);
        	
        	version.Append(_L("Copyright "));
			version.Append( KCopyrightChar );
			version.Append(_L(" 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved."));
        	
        	dlg->SetMessageText(version);
        	dlg->ExecuteLD(R_STIFUI_ABOUT_DIALOG);
        	newView = currentView;
        	break;
        	}
        default:
			{
            TMessageBoxUtil::ShowNotImplementedYetL();
			newView = currentView;
            break;
			}
        }

	if( newView != currentView )
		{
        iPreviousView = currentView; // Store previous view for Back function
		ActivateLocalViewL( TUid::Uid(newView) );

		/*switch ( newView )
			{
			case EMainMenuViewId:
            case EStartedCasesMenuViewId:
            case EStartCaseMenuViewId:
            case ETestCaseOutputViewId:
				{
		        //StatusPane()->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL);
                //iTabGroup->DimTab (ETestCaseMenuTab, ETrue);
                //iTabGroup->DimTab (ETestModulesMenuTab, ETrue);
                //iTabGroup->DimTab (ETestSetsMenuTab, ETrue);

                //StatusPane()->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_EMPTY);
				//StatusPane()->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_IDLE);
				break;
				}
			case ETestCaseMenuViewId:
			case ETestModulesMenuViewId:
			case ETestSetsMenuViewId:
				{
				//StatusPane()->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL);
                //iTabGroup->DimTab (ETestCaseMenuTab, EFalse);
                //iTabGroup->DimTab (ETestModulesMenuTab, EFalse);
                //iTabGroup->DimTab (ETestSetsMenuTab, EFalse);
                break;
				}
			default:
				{
                break;
				}
			}*/
		}

    }

/**
* Receives output update notification from UI Storehandler
* @param
* @return
*/
void CAppUIAppUi::OutputUpdateL( CStartedTestCase* aTestCase, TInt /* aStatus */ )
    {
    if( iView->Id().iUid == ETestCaseOutputViewId )
        {
        ( ( CTestCaseOutputView* )iView )->OutputUpdateL( aTestCase );
        }
    else if( iView->Id().iUid == EShowStartedCasesViewId )
        {
        ( ( CShowStartedCasesView* )iView )->TestCaseStateChangedL();
        }
    else if( iView->Id().iUid == ETestCaseOutputViewId )
        {
        ( ( CTestCaseOutputView* )iView )->TestCaseStateChangedL();
        }
    }
  
/**
* Sets index of selected test case for viewing test case output
* @param
* @return
*/    
void CAppUIAppUi::SetStartedTestCase( CStartedTestCase* aStartedTestCase )
    {
    iStartedTestCase = aStartedTestCase;
    }    
  
/**
* Returns index of selected test case for viewing test case output
* @param
* @return
*/    
CStartedTestCase* CAppUIAppUi::GetStartedTestCase( )
    {
    return iStartedTestCase;
    }        

/**
 * Stores focus position of focus from a specyfic view to iPreviousFocusPosition object.
 * Value is than used to retrieve previous position of focus in the menu
 * @param aViewId - identification of view
 * @param aPosition - value to store for a specyfic view
 */
void CAppUIAppUi::SaveFocusPosition(TAppUIViewNumber aViewId, TInt aPosition)
	{
	if(!iPreviousPositionListValid)
		{
		return;
		}
	for(TInt counter = iPreviousFocusPosition.Count(); counter <= aViewId; counter++)
		{
		iPreviousFocusPosition.Append(0);
		}
	iPreviousFocusPosition[aViewId] = aPosition;
	}

/**
 * Restores focus position of focus for a specyfic view from iPreviousFocusPosition object.
 * @param aViewId - identification of view
 * @return - previous position of focus in the requested view
 */
TInt CAppUIAppUi::GetFocusPosition(TAppUIViewNumber aViewId)
	{
	if(iPreviousFocusPosition.Count() > aViewId)
		{
		return iPreviousFocusPosition[aViewId];
		}
	else
		{
		return KErrNotFound;
		}
	}

// End of File