piprofilerui/ui/avkon/src/profiler_gui_appui.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 13 Oct 2010 14:32:52 +0300
branchRCL_3
changeset 60 6646c35e558c
parent 22 822c625f7adc
permissions -rw-r--r--
Revision: 201039 Kit: 201041

/*
* 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:   
*
*/



// INCLUDE FILES
#include "profiler_gui_appui.h"
#include "profiler_gui_mainview.h"
#include "profiler_gui.hrh"
#include "profiler_gui_model.h"
#include "profiler_gui_document.h"
#include <piprofilerui.rsg>
#include <piprofiler/ProfilerTraces.h>
#include <piprofiler/ProfilerSession.h>
#include <piprofiler/ProfilerConfig.h>

#include <AknWaitDialog.h>
#include <AknGlobalNote.h>
#include <avkon.hrh>
#include <AknQueryDialog.h>
#include <aknmessagequerydialog.h> 
#include <pathinfo.h>


// ================= MEMBER FUNCTIONS =======================

void CProfilerGuiAppUi::ConstructL()
    {
    // set as system application to prevent getting shut down events 
    iEikonEnv->SetSystem(ETrue);
    
    BaseConstructL(EAknEnableSkin);
    
    // get model
    iModel = static_cast<CProfilerGuiDocument*>(reinterpret_cast<CEikAppUi*>(iEikonEnv->AppUi())->Document())->Model();
	
	LOGTEXT(_L("ProfilerGuiAppUi::ConstructL - setting main view settings"));
    
    CProfilerGuiMainView* mainView = new(ELeave) CProfilerGuiMainView;
    CleanupStack::PushL(mainView);
    mainView->ConstructL();
    AddViewL(mainView);           // transfer ownership to CAknViewAppUi
    CleanupStack::Pop();          // mainView

	LOGTEXT(_L("ProfilerGuiAppUi::ConstructL - setting default view"));

    SetDefaultViewL(*mainView);

    LOGTEXT(_L("ProfilerGuiAppUi::ConstructL - activating model"));

    // notify the model that everything has been constructed
    iModel->ActivateModelL();
    }

// --------------------------------------------------------------------------------------------

CProfilerGuiAppUi::~CProfilerGuiAppUi()
    {
    // notify the model that the application is closing 
    if (iModel)   
        TRAP_IGNORE(iModel->DeActivateModelL());

    }

// --------------------------------------------------------------------------------------------

void CProfilerGuiAppUi::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
    {
    if( aResourceId == R_PROFILER_START_SUBMENU )
        {
        CEikMenuPaneItem::SData itemData;
        _LIT(KMenuText, "Profiling for %d sec.");
        itemData.iText.Format(KMenuText, iModel->GeneralSettings().iTimedSamplingPeriod);// = _L("Profiling for %d sec.");  // Label text for the menu item
        itemData.iCommandId = EProfilerGuiCmdStartTimed;    // Command ID for the menu item
        itemData.iFlags = 0;
        itemData.iCascadeId = 0;
        aMenuPane->AddMenuItemL( itemData );
        }
    if (aResourceId == R_PROFILER_GUI_APP_MENU)
        {
        if(iModel->iState == MProfilerStatusObserver::ERunning)
        	{
			aMenuPane->SetItemDimmed(EProfilerGuiCmdStartAll, ETrue);
			aMenuPane->SetItemDimmed(EProfilerGuiCmdStopAll, EFalse);
			aMenuPane->SetItemDimmed(EProfilerGuiCmdSamplerControl, ETrue);
            aMenuPane->SetItemDimmed(EProfilerGuiCmdSettings, ETrue);
        	}
        else if(iModel->iState == MProfilerStatusObserver::EIdle)
        	{
			aMenuPane->SetItemDimmed(EProfilerGuiCmdStartAll, EFalse);
			aMenuPane->SetItemDimmed(EProfilerGuiCmdStopAll, ETrue);
            aMenuPane->SetItemDimmed(EProfilerGuiCmdSamplerControl, EFalse);
            aMenuPane->SetItemDimmed(EProfilerGuiCmdSettings, EFalse);
        	}
        else
        	{
        	// if initializing or stopping no start/stop actions allowed 
			aMenuPane->SetItemDimmed(EProfilerGuiCmdStartAll, ETrue);
			aMenuPane->SetItemDimmed(EProfilerGuiCmdStopAll, ETrue);
            aMenuPane->SetItemDimmed(EProfilerGuiCmdSamplerControl, ETrue);
            aMenuPane->SetItemDimmed(EProfilerGuiCmdSettings, ETrue);
        	}
        }
    
    if(aResourceId == R_PROFILER_SAMPLER_CONTROL_MENU)
        {
        // check if item hidden, i.e. sampler cannot be started/stopped
        if(!iModel->GetSelectedItemHidden())
            {
            // item enabled => dimm the "enable" item, and other way round
            if(iModel->GetSelectedItemEnabled())
                {
                aMenuPane->SetItemDimmed(EProfilerGuiCmdSamplerEnable, ETrue);
                aMenuPane->SetItemDimmed(EProfilerGuiCmdSamplerDisable, EFalse);
                }
            // item enabled => dimm the "enable" item, and other way round
            else
                {
                aMenuPane->SetItemDimmed(EProfilerGuiCmdSamplerEnable, EFalse);
                aMenuPane->SetItemDimmed(EProfilerGuiCmdSamplerDisable, ETrue);
                }

            }
        // item hidden => dimm both enable and disable items
        else
            {
            aMenuPane->SetItemDimmed(EProfilerGuiCmdSamplerEnable, ETrue);
            aMenuPane->SetItemDimmed(EProfilerGuiCmdSamplerDisable, ETrue);
            }
        
        // if sampler item has specific settings to control 
        if(iModel->GetSelectedItemHasSettings())
            {
            aMenuPane->SetItemDimmed(EProfilerGuiCmdSamplerSettings, EFalse);
            }
        else
            {
            aMenuPane->SetItemDimmed(EProfilerGuiCmdSamplerSettings, ETrue);
            }
        }
    }

// --------------------------------------------------------------------------------------------

TKeyResponse CProfilerGuiAppUi::HandleKeyEventL(const TKeyEvent& /*aKeyEvent*/, TEventCode /*aType*/)
    {
    return EKeyWasNotConsumed;
    }

void CProfilerGuiAppUi::HandleSystemEventL(const TWsEvent& aEvent)
    {
    switch (*(TApaSystemEvent*)(aEvent.EventData()))
        {
        case EApaSystemEventShutdown:
            // check if still profiling
            if( iModel->iState != MProfilerStatusObserver::EIdle )
                {
                // stop profiling process
                iModel->StopAllSamplerItemsL();
                }

            // terminate profiler engine
            iModel->TerminateProfilerL();
            break;
        default:
            break;
        }
    // call base class implementation
    CAknAppUi::HandleSystemEventL(aEvent);
    }

// --------------------------------------------------------------------------------------------

void CProfilerGuiAppUi::HandleCommandL(TInt aCommand)
    {
    switch ( aCommand )
        {
        case EProfilerGuiCmdSettings:
            {
            // check if exit command received
            if (iModel->LaunchSettingsDialogL() == EAknCmdExit)
                {
                // terminate profiler engine...
                iModel->TerminateProfilerL();
                
                // ... and exit
                Exit();
                }
            break;
            }
        case EProfilerGuiCmdAbout:
            {
	        CAknMessageQueryDialog* dialog = new(ELeave) CAknMessageQueryDialog;
            dialog->ExecuteLD(R_PROFILER_GUI_ABOUT_DIALOG);
            }
            break;
            
        // a normal way to close an application
        case EAknCmdExit:
        case EEikCmdExit:
        case EAknSoftkeyExit: 
			{
			// decrease the client reference count in the server:
			iModel->RemoveClient();
            // check if still profiling
            if( iModel->iState != MProfilerStatusObserver::EIdle && 
                    iModel->iState != MProfilerStatusObserver::EStopping )
                {
                // ask user if he wants to leave profiling running in background process 
                if( this->RunConfQueryL( NULL ) == 0 )
                    {
                    // stop profiling process
                    iModel->StopAllSamplerItemsL();

                    // terminate profiler engine
                    iModel->TerminateProfilerL();
                    }
                }
            else
                {
                // terminate profiler engine
                iModel->TerminateProfilerL();
                }
            
            Exit();
 			}
            break;

        default:
            break;      
        }
    }

TInt CProfilerGuiAppUi::RunConfQueryL( const TDesC* aOverrideText )
	{
	CAknQueryDialog* queryDialog = CAknQueryDialog::NewL();
	
	if(aOverrideText)
		{
		queryDialog->SetPromptL(*aOverrideText);
		}
	return queryDialog->ExecuteLD(R_PROFILER_GUI_CONF_QUERY);
	}


// End of File