piprofilerui/ui/avkon/src/profiler_gui_model.cpp
changeset 48 da3ec8478e66
parent 47 11fa016241a4
child 54 9347c563e054
--- a/piprofilerui/ui/avkon/src/profiler_gui_model.cpp	Thu Sep 02 20:27:24 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1176 +0,0 @@
-/*
-* 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_samplersettingsviewdlg.h"
-#include "profiler_gui_model.h"
-#include "profiler_gui_app.h"
-#include "profiler_gui_settingsviewdlg.h"
-#include "profiler_gui_maincontainer.h"
-#include "profiler_gui.hrh"
-#include <piprofilerui.rsg>
-
-#include <coeutils.h>
-#include <bautils.h>
-#include <eikenv.h>
-#include <AknQueryDialog.h>
-#include <AknGlobalNote.h>
-#include <aknmessagequerydialog.h> 
-#include <e32math.h> 
-#include <akntitle.h> 
-#include <s32file.h>
-#include <aknnotewrappers.h>
-#include <sysutil.h>
-
-// UIDs
-#include <piprofiler/EngineUIDs.h>
-
-#include <piprofiler/ProfilerTraces.h>
-#include <piprofiler/ProfilerSession.h>
-
-// LITERALS
-_LIT(KAppName, "PI Profiler");
-_LIT(KWarningNote, "NOTE: output changed!\n");
-_LIT(KProfilerEngineExe, "PIProfilerEngine.exe");
-
-// literals for default general setting values
-_LIT8(KTraceOutput, "file_system");
-_LIT8(KTraceDebugOutput, "debug_output");
-_LIT8(KProfilerDefaultDrive, "E:\\data");
-_LIT8(KProfilerDefaultPrefix, "Profiler_#");
-
-// ===================================== MEMBER FUNCTIONS =====================================
-
-CProfilerGuiModel* CProfilerGuiModel::NewL() 
-	{
-	CProfilerGuiModel* self = new(ELeave) CProfilerGuiModel;
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop();
-	return self;
-	}
-
-// --------------------------------------------------------------------------------------------
-
-CProfilerGuiModel::CProfilerGuiModel() : CActive(EPriorityStandard)
-	{
-	}
-	
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::ConstructL()
-	{
-	// initialize basic settings
-	iDrawState = EDrawStateInvalid;
-	iReferenceNumber = 0;
-	iState = MProfilerStatusObserver::EIdle;
-	
-    iEnv = CEikonEnv::Static();
-
-    // profiler engine specific initialization
-    LaunchProfilerEngineL();
-    
-    // max sampler item list length is 64, i.e. max 64 sampler plugins loaded 
-    iSamplerItemList = new(ELeave) CSamplerItemList(64);
-
-    // initialize attribute arrays
-    iSamplerAttributes = new(ELeave) CArrayFixFlat<TSamplerAttributes>(20); // max sampler count is 20
-    
-    // engine status checker
-    iStatusChecker = CProfilerEngineStatusChecker::NewL();
-    iStatusChecker->SetObserver(this);
- 	
-	CActiveScheduler::Add(this);
-	}
-
-void CProfilerGuiModel::UpdateUIRunningStateL()
-    {
-    // prevent the control of sampler specific settings during the trace 
-    iMainContainer->SetDimmed(ETrue);
-    
-    // update status pane
-    iMainView->UpdateStatusPaneL(iState);
-
-    // show an info popup showing the logging method
-    iMainContainer->ShowWriterInfoPopupL(KNullDesC);
-    
-    // refresh view
-    RefreshViewL();
-    }
-
-// --------------------------------------------------------------------------------------------
-void CProfilerGuiModel::NotifyContainerReadyL()
-	{
-	// load initial plugins
-    LoadPluginsL();
-    
-    // get the initial state
-    if( iStatusChecker->GetInitialState() == MProfilerStatusObserver::ERunning )
-        {
-        // set model state to restarting and grabbing an existing profiler process
-        iState = MProfilerStatusObserver::ERestarting;
-        
-        // update status pane to correspond the running mode
-        UpdateUIRunningStateL();
-
-        // set model state to running
-        iState = MProfilerStatusObserver::ERunning;
-
-        }
-	}
-
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::ActivateModelL()
-	{
-	// load general settings
-	if( LoadGeneralSettingsL() != KErrNone )
-	    {
-	    LOGTEXT(_L("ProfilerGuiAppUi::ActivateModelL - could not connect profiler engine"));
-	    }
-	}
-
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::DeActivateModelL()
-	{
-	Cancel();
-	
-	// for a faster exit, send the application to background
-    TApaTask selfTask(iEnv->WsSession());
-    selfTask.SetWgId(iEnv->RootWin().Identifier());
-    selfTask.SendToBackground();
-	}
-	
-// --------------------------------------------------------------------------------------------
-
-CProfilerGuiModel::~CProfilerGuiModel()
-	{
-    if (iSamplerItemList)
-        {
-        DeleteAllSamplerItems();
-        delete iSamplerItemList;
-        iSamplerItemList = NULL;
-        }
-    
-    if(iStatusChecker)
-        {
-        iStatusChecker->Cancel();
-        delete iStatusChecker;
-        iStatusChecker = NULL;
-        }
-    
-  
-    if(iSamplerAttributes)
-        {
-        iSamplerAttributes->Reset();
-        delete iSamplerAttributes;
-        iSamplerAttributes = NULL;
-        }
-     
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::DoCancel()
-	{
-    
-	}
-
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::RunL()
-	{
-
-	}
-	
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::SetMainContainer(CProfilerGuiMainContainer* aContainer)
-    {
-    iMainContainer = aContainer;
-    iDrawState = EDrawStateMain;
-    }
-
-void CProfilerGuiModel::UpdateState(TInt aState)
-	{
-	iState = aState;
-	}
-
-TInt CProfilerGuiModel::FindProcessL(RProcess& aProc)
-    {
-    TProcessId engId;
-    TFindProcess procName;
-    procName.Find(_L("PIProfilerEngine.exe*"));
-    TFullName aResult;
-    TFullName aResult2;
-    TInt err(KErrNone);
-
-    // find the first appearance
-    err = procName.Next(aResult);
-    if(err != KErrNone)
-        {
-        // did not find any engine process
-        return err;
-        }
-    else
-        {
-        err = aProc.Open(procName);
-        if(err == KErrNone)
-            {
-            if(aProc.ExitCategory().Length() > 0)
-                {
-                aProc.Close();
-                // process already exited => create a new one
-                return KErrNotFound;
-                }
-            aProc.Close();
-            }
-        }
-    
-//    // check now if a second appearance exists in process list, 
-//    // i.e. engine started from eshell => two engine processes appear in normal case
-//    procName.Next(aResult2);
-//
-//    // check if aResult2 contained the second appearance of profiler engine
-//    if(aResult2.CompareF(aResult) > 0)
-//        {
-//        // other process found, i.e. right process to communicate with, in case started from eshell
-//        err = aProc.Open(procName);
-//        if(err == KErrNone)
-//            {
-//            if(aProc.ExitCategory().Length() > 0)
-//                {
-//                // process already exited => create a new one
-//                return KErrNotFound;
-//                }
-//            aProc.Close();
-//            }
-//        }
-    
-    return err;
-    }
-
-void CProfilerGuiModel::LaunchProfilerEngineL()
-    {
-    LOGTEXT(_L("CProfilerGuiModel::LaunchProfilerEngineL - start"));
-
-    TRequestStatus stat = KRequestPending;
-    RProcess proc;
-    
-    TInt err(KErrNone);
-    
-    // check if process exists
-    err = FindProcessL(proc);
-    
-    // check if already exists and don't start a new eshell profiling
-    if( err == KErrNotFound )
-        {
-        // try create new process
-        err = proc.Create(KProfilerEngineExe, _L(""));
-
-        // check if RProcess::Create() succeeded
-        if( err == KErrNone )
-            {
-            // Trigger rendezvous on the supplied TRequestStatus object
-            proc.Rendezvous(stat); 
-
-            // kick off the engine process
-            proc.Resume();
-            
-            // wait for the constructor to complete 
-            User::WaitForRequest(stat); 
-            
-            // just lose the handle
-            proc.Close();
-            }
-        }
-    
-    // Increase the client reference count in server:
-    AttachClient();    
-    }
-
-//-----------------------------------------------------------------------------
-// CProfilerGuiModel::TerminateProfilerL()
-// Stops Profiler Engine if it has been launched by this launcher. 
-//-----------------------------------------------------------------------------
-
-void CProfilerGuiModel::TerminateProfilerL()
-    {
-    LOGTEXT(_L("CProfilerGuiModel::TerminateProfiler - entry"));
-    
-    // exit profiler engine 
-    RProfiler::ExitProfiler();
-        
-    LOGTEXT(_L("CProfilerGuiModel::TerminateProfiler - exit"));
-    
-    }
-
-void CProfilerGuiModel::AttachClient()
-    {
-    LOGTEXT(_L("CProfilerGuiModel::AttachClient - entry"));
-    
-    // 
-    RProfiler::AttachClient();
-        
-    LOGTEXT(_L("CProfilerGuiModel::AttachClient - exit"));
-    
-    }
-
-void CProfilerGuiModel::RemoveClient()
-    {
-    LOGTEXT(_L("CProfilerGuiModel::RemoveClient - entry"));
-    
-    // 
-    RProfiler::RemoveClient();
-        
-    LOGTEXT(_L("CProfilerGuiModel::RemoveClient - exit"));
-    
-    }
-
-void CProfilerGuiModel::AddNewSamplersL(CArrayFixFlat<TSamplerAttributes>& aAttributes)
-	{
-	TSamplerAttributes item;
-	
-	TInt count(aAttributes.Count());
-
-	// loop the attribute array and insert them into view list
-	for (TInt i(0);i<count;i++)
-		{
-    	// get a TSamplerAttributes from list at a time  
-		item = aAttributes.At(i);
-
-		iReferenceNumber++;
-	
-        // add item to the array
-        AppendToSamplerItemListL(item);
-        
-        // update the listbox
-        RefreshViewL(EFalse);
-        
-        // set item index to the begin	
-        iMainContainer->ListBox()->SetCurrentItemIndexAndDraw(iMainContainer->ListBox()->Model()->NumberOfItems()-1);
-
-		}
-    // refresh again
-    if(iReferenceNumber > 0)
-        {
-        RefreshViewL(ETrue);
-        }
-	}
-
-TBool CProfilerGuiModel::CheckTraceLocationSanityL(TGeneralAttributes& aAttr, TBool aQuietCheck)
-    {
-    RFs fs;
-    User::LeaveIfError(fs.Connect());
-
-    TBuf<32> drive;
-    
-    CnvUtfConverter::ConvertToUnicodeFromUtf8(drive, aAttr.iSaveFileDrive);
-
-    TDriveUnit driveUnit = TDriveUnit(drive);
-
-    TBool ret(EFalse);
-
-    // check that the root folder is correct
-    if (drive.Length() > 2 && BaflUtils::CheckFolder(fs, drive.Left(3)) == KErrNone )
-        {
-        // check then if drive has still some space
-        if(!SysUtil::DiskSpaceBelowCriticalLevelL(&fs, 0, driveUnit))
-            {
-            ret = ETrue;
-            }
-        }
-    
-    // check if the sanity check failed
-    if(!ret)
-        {
-        // show an error note
-        if(aQuietCheck == EFalse)
-            {
-            CAknErrorNote* note = new(ELeave) CAknErrorNote();
-            note->ExecuteLD(_L("Invalid path, check settings!"));
-            }
-        }
-    fs.Close();
-    return ret;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TInt CProfilerGuiModel::LaunchSettingsDialogL()
-    {
-    // launch the settings dialog
-    TGeneralAttributes newSettings = iGeneralAttributes;
-    TBool quietCheck(EFalse);
-    
-    CProfilerGuiSettingsViewDlg* dlg = CProfilerGuiSettingsViewDlg::NewL(newSettings);
-    TInt returnValue = dlg->ExecuteLD(R_PROFILER_GUI_SETTINGS_DIALOG);
-    
-    // check if exit command => no error note to user
-    if(returnValue == EAknCmdExit)
-        quietCheck = ETrue;
-    
-    // always save settings since the settings dialog does not provide a possibility to cancel
-    iGeneralAttributes.iTraceOutput.Copy(newSettings.iTraceOutput);
-    iGeneralAttributes.iTraceFilePrefix.Copy(newSettings.iTraceFilePrefix);
-    iGeneralAttributes.iTimedSamplingPeriod = newSettings.iTimedSamplingPeriod;
-
-    // check if debug output selected no check of
-    if(newSettings.iTraceOutput.CompareF(KTraceDebugOutput) != 0)
-        {
-        // Check save file drive sanity
-        if(CheckTraceLocationSanityL(newSettings, quietCheck))
-            {
-            // save the new location
-            iGeneralAttributes.iSaveFileDrive.Copy(newSettings.iSaveFileDrive);
-            }
-        }
-    
-    // saves the general settings to profiler engine
-    SaveGeneralSettingsL();   
-    
-    // make sure that the title of the application is correct
-    CEikStatusPane* sp = iEnv->AppUiFactory()->StatusPane();
-    CAknTitlePane* tp = static_cast<CAknTitlePane*>( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
-    tp->SetTextL(KAppName);
-    
-    return returnValue;
-    }
-
-
-TPtrC CProfilerGuiModel::GetWriterInfoNoteL(const TDesC& aNote)
-	{
-    TBuf<256> buf;
-    TBuf<128> descBuf;
-    
-    buf.Zero();
-
-    // get active profiler since it 
-    RProfiler::GetActiveWriter(buf);
-    
-	if(iGeneralAttributes.iTraceOutput.CompareF(KTraceOutput) == 0)
-		{
-		if(iState == MProfilerStatusObserver::EInitializing ||
-                iState == MProfilerStatusObserver::ERestarting )
-			{
-			descBuf.Zero();
-			// set the additional note if available
-			buf.Copy(aNote); 
-			RProfiler::GetFileName(descBuf);
-			buf.Append(_L("Writing to "));
-			buf.Append(descBuf);
-			}
-		else if(iState == MProfilerStatusObserver::EIdle ||
-		        iState == MProfilerStatusObserver::EStopping ||
-		        iState == MProfilerStatusObserver::ERunning )
-			{
-			descBuf.Zero();
-            // set the additional note if available
-            buf.Copy(aNote); 
-            RProfiler::GetFileName(descBuf);
-			buf.Append(_L("Wrote trace data to "));
-			buf.Append(descBuf);
-			}
-		else
-		    {
-	          buf.Copy(KNullDesC);
-		    }
-		}
-	else if(iGeneralAttributes.iTraceOutput.CompareF(KTraceDebugOutput) == 0)
-		{
-		if(iState == MProfilerStatusObserver::EInitializing ||
-                iState == MProfilerStatusObserver::ERestarting )
-			{
-			buf.Copy(_L("Writing to debug output..."));
-			}
-		else if( iState == MProfilerStatusObserver::EIdle || 
-	             iState == MProfilerStatusObserver::EStopping ||
-		         iState == MProfilerStatusObserver::ERunning )
-			{
-			buf.Copy(_L("Wrote trace data to debug output"));
-			}
-		else
-		    {
-		    buf.Copy(KNullDesC);
-		    }
-		}
-	else
-	    {
-	    // should not reach this point
-        buf.Copy(KNullDesC);
-	    }
-    
-    return TPtrC(buf);	
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TInt CProfilerGuiModel::EditSamplerL(TSamplerAttributes& aItem)
-    {
-    // edit sampler specific settings i.e. attributes
-    TSamplerAttributes& newSettings = aItem;
-    TInt indexToReplace(iMainContainer->CurrentListBoxItemIndex());
-    
-    // create a new settings editor dialog
-    CProfilerSamplerSettingsViewDlg* dlg = CProfilerSamplerSettingsViewDlg::NewL(newSettings);
-    TInt returnValue = dlg->ExecuteLD(R_PROFILER_SAMPLER_SETTINGS_DIALOG);
-    
-    // save settings
-    aItem = newSettings;
-
-    // replace the old attribute container with saved values
-    iSamplerItemList->Delete(indexToReplace);
-    iSamplerItemList->InsertL(indexToReplace, newSettings);
-    
-    // save the settings to sampler item
-    RProfiler::SetSamplerAttributes(newSettings);
-    
-    // make sure that the title of the application is correct
-    CEikStatusPane* sp = iEnv->AppUiFactory()->StatusPane();
-    CAknTitlePane* tp = static_cast<CAknTitlePane*>( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
-    tp->SetTextL(KAppName);
-
-    return returnValue;
-    }
-
-
-void CProfilerGuiModel::SamplerInfoL(TSamplerAttributes& aItem)
-    {
-    TBuf<64> header;
-    TBuf<256> info;
-    
-    _LIT(KSamplerStr, "Sampler Info");
-    
-//    CnvUtfConverter::ConvertToUnicodeFromUtf8(header, aItem.iName);
-    
-    header.Append(KSamplerStr);
-
-    CnvUtfConverter::ConvertToUnicodeFromUtf8(info, aItem.iDescription);
-
-    CAknMessageQueryDialog* dialog = new(ELeave) CAknMessageQueryDialog;
-    //dialog->ExecuteLD(info);
-    dialog->PrepareLC( R_PROFILER_GUI_EMPTY_ABOUT_DIALOG );
-    dialog->SetHeaderText(header);
-    dialog->SetMessageTextL(info);
-    dialog->RunLD(); 
-
-    RefreshViewL(EFalse);
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::StartAllSamplerItemsL(TProfilingMode aProfilingMode)
-    {
-    TBuf<256> activeWriterDes;
-    TBuf8<256> writer8;
-    
-    iState = MProfilerStatusObserver::EInitializing;
-    
-    RProfiler::TProfilingMode profilingMode = aProfilingMode == EProfilingModeTimed ? RProfiler::EProfilingModeTimed : RProfiler::EProfilingModeNormal;
-    
-    // update status pane to correspond the initializing mode
-    // prevent the control of sampler specific settings during the trace 
-    iMainContainer->SetDimmed(ETrue);
-    
-    // update status pane
-    iMainView->UpdateStatusPaneL(iState);
-    
-    // refresh view
-    RefreshViewL();
-    
-    // try to start profiling process through client-server interface
-    if(RProfiler::StartSampling(profilingMode) == KErrNotFound)
-        {
-        
-        // profiler stopped (e.g. from eshell) and must be restarted 
-        LaunchProfilerEngineL();
-        
-        // set general attributes
-        SaveGeneralSettingsL();
-        
-        // set sampler attributes
-        for(TInt i(0);i<iSamplerAttributes->Count();i++)
-            {
-            // set the attributes for each sampler loaded in the UI
-            RProfiler::SetSamplerAttributes(iSamplerAttributes->At(i));
-            }
-        
-        // try to launch sampling again
-        RProfiler::StartSampling(profilingMode);
-        }
-    
-    // get selected writer
-    RProfiler::GetActiveWriter(activeWriterDes);
-    CnvUtfConverter::ConvertFromUnicodeToUtf8(writer8, activeWriterDes);
-    
-    // check that output mode has not changed for a problem with trace file name
-    // problem cases:
-    // - trace file name and/or path false
-    // - disk full, cannot write to given location
-    // - false drive, e.g. x:
-    if(writer8.CompareF(iGeneralAttributes.iTraceOutput) != 0)
-        {
-        // save change also to general attributes
-        iGeneralAttributes.iTraceOutput.Copy(writer8);
-        // show an info popup showing the logging method
-        iMainContainer->ShowWriterInfoPopupL(KWarningNote);
-        }
-    else
-        {
-        // show an info popup showing the logging method
-        iMainContainer->ShowWriterInfoPopupL(KNullDesC);
-        }
-    
-    // update the view
-    RefreshViewL();    
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::DeleteAllSamplerItemsL()
-    {
-    DeleteAllSamplerItems();
-    
-    RefreshViewL();
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::StopAllSamplerItemsL()
-    {
-    // show an info popup showing the logging method
-    iMainContainer->ShowWriterInfoPopupL(KNullDesC);
-    
-    // Stop profiling process through CS session
-    RProfiler::StopSampling();
-    
-    RefreshViewL();
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::RefreshViewL(TBool aClearSelection)
-    {
-    // refresh the main list view
-    if (iMainContainer && iDrawState == EDrawStateMain && iMainContainer->ListBox())
-        {
-        // clear selections if any
-        iMainContainer->ListBox()->ClearSelection();
-        
-        // set item index to 0
-        if (aClearSelection)
-            iMainContainer->ListBox()->SetCurrentItemIndex(0); 
-        
-        // set text items
-        iMainContainer->SetListBoxTextArrayL(GenerateListBoxItemTextArrayL());
-        }
-    }
-        
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::AppendToSamplerItemListL(TSamplerAttributes& aItem)
-    {
-    // append single sampler item into sampler item list
-    if (iSamplerItemList)
-        iSamplerItemList->AppendL( aItem );
-    else
-        User::Leave(KErrNotReady);
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::DisableOrEnableFromSamplerItemListL(TInt aIndex)
-    {
-    if (iSamplerItemList)
-        {
-        if (iSamplerItemList->Count() > aIndex && aIndex >= 0)
-            {
-            TSamplerAttributes& attr = iSamplerItemList->At(aIndex);
-            if (attr.iEnabled)
-                {
-                attr.iEnabled = EFalse;
-                }
-            else if (!attr.iEnabled)
-                {
-                attr.iEnabled = ETrue;
-                }
-            // save settings to engine
-            RProfiler::SetSamplerAttributes(attr);
-            }
-        else
-            User::Leave(KErrNotFound);
-        }
-    else
-        {
-        User::Leave(KErrNotReady);
-        }
-
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TInt CProfilerGuiModel::SamplerItemCount() const
-    {
-    TInt count(0);
-    
-    if (iSamplerItemList)
-        count = iSamplerItemList->Count();
-    
-    return count;
-    }
-    
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::DeleteAllSamplerItems()
-    {
-    // reset sampler array
-    iSamplerItemList->Reset();    
-    }  
-          
-// --------------------------------------------------------------------------------------------
-
-CDesCArray* CProfilerGuiModel::GenerateListBoxItemTextArrayL()
-    {
-    CDesCArray* textArray = new(ELeave) CDesCArrayFlat(64);
-    CleanupStack::PushL(textArray);
-
-    _LIT(KEntryTemplateRedIcon,   "1\t%S\t\t");
-    _LIT(KEntryTemplateGreenIcon, "2\t%S\t\t");
-    
-    TSamplerAttributes attr;
-    TInt itemCount(SamplerItemCount()); 
-    for (TInt i(0); i<itemCount; i++)
-        {
-        // add description from each entry
-        TBuf<512> textEntry;
-        TBuf<512> description; 
-
-        attr = iSamplerItemList->At(i);
-        
-        description.Copy(attr.iName);
-        
-        if (attr.iEnabled)
-            textEntry.Format(KEntryTemplateGreenIcon, &description);
-        else
-            textEntry.Format(KEntryTemplateRedIcon, &description);
-        
-        textArray->AppendL(textEntry);
-        }    
-    
-    CleanupStack::Pop(); //textArray
-    return textArray;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TBool CProfilerGuiModel::GetSelectedItemEnabled()
-    {
-    TInt currentItemIndex = iMainContainer->CurrentListBoxItemIndex();
-    
-    if (SamplerItemCount() > currentItemIndex && currentItemIndex >= 0)
-        {
-        return iSamplerItemList->At(currentItemIndex).iEnabled;
-        }
-    return EFalse;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TBool CProfilerGuiModel::GetSelectedItemHasSettings()
-    {
-    TInt currentItemIndex = iMainContainer->CurrentListBoxItemIndex();
-    
-    if (SamplerItemCount() > currentItemIndex && currentItemIndex >= 0)
-        {
-        if(iSamplerItemList->At(currentItemIndex).iItemCount != 0 || 
-                iSamplerItemList->At(currentItemIndex).iSampleRate != KErrNotFound)
-            {
-            return ETrue;
-            }
-        else
-            {
-            return EFalse;
-            }
-        }
-    return EFalse;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TBool CProfilerGuiModel::GetSelectedItemHidden()
-    {
-    TInt currentItemIndex = iMainContainer->CurrentListBoxItemIndex();
-    
-    if (SamplerItemCount() > currentItemIndex && currentItemIndex >= 0)
-        {
-        if(iSamplerItemList->At(currentItemIndex).iIsHidden)
-            {
-            return ETrue;
-            }
-        else
-            {
-            return EFalse;
-            }
-        }
-    return EFalse;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-TInt CProfilerGuiModel::EditSelectedSamplerL(TInt index)
-    {
-    TSamplerAttributes sampler;
-    if(SamplerItemCount() > index && index >= 0)
-        {
-        sampler = iSamplerItemList->At(index);
-        return EditSamplerL(sampler);
-        }
-    return KErrNone;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::SelectedSamplerInfoL(TInt index)
-    {
-    if(SamplerItemCount() > index && index >= 0)
-        {
-        SamplerInfoL(iSamplerItemList->At(index));
-        }
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::ShowItemActionMenuL()
-    {
-    TInt currentItemIndex = iMainContainer->CurrentListBoxItemIndex();
-    
-    if (SamplerItemCount() > currentItemIndex && currentItemIndex >= 0)
-        {
-        // show a query dialog    
-        TInt queryIndex(0);
-        CAknListQueryDialog* listQueryDlg = new(ELeave) CAknListQueryDialog(&queryIndex);
-        TInt resource = 0;
-        TSamplerAttributes sampler = iSamplerItemList->At(currentItemIndex);
-        
-        // check if sampler enabled
-        if(sampler.iEnabled)
-        	{
-        	resource = R_ITEM_ACTION_QUERY_ENABLED;
-            }
-        else
-        	{
-        	resource = R_ITEM_ACTION_QUERY_DISABLED;
-        	}
-        
-        // check if sampler plugin hidden => don't allow starting and stopping of sampling
-        if(sampler.iIsHidden)
-        	{
-        	resource = R_ITEM_ACTION_QUERY_HIDDEN_START_STOP;
-        	}
-        else if(( sampler.iItemCount == 0 && 
-        		sampler.iSampleRate == KErrNotFound ) && 
-        		sampler.iEnabled )
-            {
-            resource = R_ITEM_ACTION_QUERY_HIDDEN_SETTINGS_ENABLED;
-            }
-        else if(( sampler.iItemCount == 0 && 
-                sampler.iSampleRate == KErrNotFound ) && 
-                !sampler.iEnabled )
-            {
-            resource = R_ITEM_ACTION_QUERY_HIDDEN_SETTINGS_DISABLED;
-            }
-        
-        // execute query dialog with the given resource
-        if (listQueryDlg->ExecuteLD(resource))
-            {
-            if(!sampler.iIsHidden)
-            	{
-            	if(sampler.iItemCount != 0 || 
-            	        sampler.iSampleRate != KErrNotFound )
-            	    {
-                    // enable/disable sampler
-                    if (queryIndex == EItemActionMenuTypeEnable)
-                        {
-                        DisableOrEnableSelectedOrHighlightedItemsL();
-                        }
-                    // edit sampler settings
-                    else if (queryIndex == EItemActionMenuTypeEditSettings - 1)
-                        {
-                        EditSamplerL(sampler);
-                        }
-                    // info
-                    else if (queryIndex == EItemActionMenuTypeInfo - 1)
-                        {
-                        SamplerInfoL(sampler);
-                        }
-            	    }
-            	else
-            	    {
-                    // special case, use raw query indexes
-                     if (queryIndex == 0)
-                         {
-                         DisableOrEnableSelectedOrHighlightedItemsL();
-                         }
-                     else if (queryIndex == 1)
-                         {
-                         SamplerInfoL(sampler);
-                         }
-            	    }
-            	}
-            else
-				{
-				if(sampler.iItemCount != 0 || 
-				        sampler.iSampleRate != KErrNotFound)
-					{
-					// special case, use raw query indexes
-					// edit sampler settings
-					if (queryIndex == 0)
-						{
-						EditSamplerL(sampler);
-						}
-					// sampler info
-					else if (queryIndex == 1)
-						{
-						SamplerInfoL(sampler);
-						}
-					}
-				else
-					{
-					// only sampler info available if hidden and no setting items to be set
-					if (queryIndex == 0)
-						{
-						SamplerInfoL(sampler);
-						}
-					
-					}
-				}
-            }
-        }
-    }
-
-void CProfilerGuiModel::DisableOrEnableSelectedOrHighlightedItemsL()
-    {
-    const CArrayFix<TInt>* selectionIndexes = iMainContainer->ListBoxSelectionIndexes();
-
-    // by default use selected items
-    if (selectionIndexes && selectionIndexes->Count() > 0)
-        {
-        TInt ref(0);
-        TKeyArrayFix key(0, ECmpTUint16);
-        TInt index(0);
-
-        for (TInt i=0; i<SamplerItemCount(); i++)
-            {
-            ref = i;
-
-            if (selectionIndexes->Find(ref, key, index) == 0)  
-                {
-                DisableOrEnableFromSamplerItemListL(i);
-                }
-            }
-        
-        RefreshViewL(EFalse);
-        }
-    
-    // or if none selected, use the current item index
-    else
-        {
-        TInt currentItemIndex = iMainContainer->CurrentListBoxItemIndex();
-        
-        if (SamplerItemCount() > currentItemIndex && currentItemIndex >= 0)
-            {
-            DisableOrEnableFromSamplerItemListL(currentItemIndex);
-            
-            RefreshViewL(EFalse);
-            }
-        }  
-    }
-
-void CProfilerGuiModel::LoadPluginsL()
-	{
-    // get samplers from Profiler Engine (client-server session) 
-	// and add the to the samplers list for the first time
-    LOGTEXT(_L("CProfilerGuiModel::LoadPlugins - get sampler plugins"));
-    TInt err = RProfiler::GetSamplerAttributes(*iSamplerAttributes);
-    
-    // check if engine provided a list of samplers
-    if( err != KErrNone )
-        {
-        // could not get samplers from engine
-        LOGTEXT(_L("CProfilerGuiModel::LoadPlugins - failed to connect engine"));
-        }
-    else
-        {
-        LOGTEXT(_L("CProfilerGuiModel::LoadPlugins - adding new samplers into view"));
-        AddNewSamplersL(*iSamplerAttributes);
-        }
-    
-    LOGTEXT(_L("CProfilerGuiModel::LoadPlugins - exit"));
-	}
-
-// --------------------------------------------------------------------------------------------
-
-TInt CProfilerGuiModel::LoadGeneralSettingsL()
-    {
-    // local variable for getting saved settings from profiler engine
-    TGeneralAttributes generalAttr;
-    TInt err(KErrNone);
-    
-    // before loading saved settings (from settings file) set the default values 
-    iGeneralAttributes.iTraceOutput.Copy(KTraceOutput);
-    iGeneralAttributes.iTraceFilePrefix.Copy(KProfilerDefaultPrefix);
-    iGeneralAttributes.iSaveFileDrive.Copy(KProfilerDefaultDrive);
-    iGeneralAttributes.iTimedSamplingPeriod = KDefaultTimedSamplingPeriod;
-    
-    // request to 
-    err = RProfiler::GetGeneralAttributes(generalAttr);
-    
-    // check that request succesfull
-    if( err != KErrNone )
-        {
-        // could not connect profiler engine, use 
-        return err;
-        }
-    
-    // check if saved settings different than the default
-    if(generalAttr.iTraceOutput.MatchF(iGeneralAttributes.iTraceOutput) == KErrNotFound)
-        {
-        iGeneralAttributes.iTraceOutput.Copy(generalAttr.iTraceOutput);
-        }
-
-    if(generalAttr.iTraceFilePrefix.MatchF(iGeneralAttributes.iTraceFilePrefix) == KErrNotFound)
-        {
-        iGeneralAttributes.iTraceFilePrefix.Copy(generalAttr.iTraceFilePrefix);
-        }
-
-    if(generalAttr.iSaveFileDrive.MatchF(iGeneralAttributes.iSaveFileDrive) == KErrNotFound)
-        {
-        iGeneralAttributes.iSaveFileDrive.Copy(generalAttr.iSaveFileDrive);
-        }
-    
-    if( generalAttr.iTimedSamplingPeriod > 0)
-        {
-        iGeneralAttributes.iTimedSamplingPeriod = generalAttr.iTimedSamplingPeriod;
-        }
-    
-    return err;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::SaveGeneralSettingsL()
-    {
-    TInt err(KErrNone);
-    
-    // save general attributes to Profiler Engine
-    err = RProfiler::SetGeneralAttributes(iGeneralAttributes);
-    
-    // check if save failed
-    if(err == KErrNotFound)
-        {
-        // profiler stopped (e.g. from eshell) and must be restarted 
-        LaunchProfilerEngineL();
-        
-        err = RProfiler::SetGeneralAttributes(iGeneralAttributes);
-        if(err != KErrNone)
-            {
-            // leave no use to continue
-            User::Leave(err);
-            }
-        }
-    }
-
-void CProfilerGuiModel::SetMainView(CProfilerGuiMainView* aMainView)
-    {
-    iMainView = aMainView;
-    }
-
-// --------------------------------------------------------------------------------------------
-
-void CProfilerGuiModel::HandleProfilerStatusChange( KProfilerStatus aStatus )
-    {
-    iState = aStatus;
-    if( aStatus == EIdle )
-        {
-        iMainContainer->ShowWriterInfoPopupL(KNullDesC);
-        // set plugin list back to enabled
-        iMainContainer->SetDimmed(EFalse);
-        }
-    TRAP_IGNORE(iMainView->UpdateStatusPaneL(aStatus));
-    }
-
-void CProfilerGuiModel::HandleProfilerErrorL( TInt aError )
-    {
-    TBuf<64> errorMsg;
-    _LIT(KErrorMessage, "Error: ");
-    _LIT(KNoMemory, "Cannot write to file, check settings");
-    
-    errorMsg.Copy(KErrorMessage);
-    // message from pwr sampler
-    if( aError < -1000 )
-        {
-        errorMsg.Append(_L("Stop other power measurement tools!"));
-        }
-    else if( aError == KErrAlreadyExists || aError == 11 )
-        {
-        errorMsg.Append(_L("Close old Profiler before start!"));
-        }
-    else if( aError == KErrNotReady )
-        {
-        errorMsg.Append(_L("Memory card removed, failed to write!"));
-        }
-    else if( aError == KErrPathNotFound )
-        {
-        errorMsg.Append(_L("Given trace data location does not exist"));
-        }
-    else
-        {
-        if( aError == KErrNoMemory || 
-                aError == KErrOverflow || 
-                aError == KErrDirFull || 
-                aError == KErrDiskFull || 
-                aError == KErrNotReady )
-            {
-            errorMsg.Append(KNoMemory);
-            }
-        else
-            {
-            errorMsg.Append(_L("code: "));
-            errorMsg.AppendNum(aError);
-            }
-        }
-    // simply show an error note
-    CAknErrorNote* note = new(ELeave) CAknErrorNote();
-    note->ExecuteLD(errorMsg);
-    
-    // set state idle in all error cases
-    iState = MProfilerStatusObserver::EIdle;
-    
-    // update status pane
-    iMainView->UpdateStatusPaneL(iState);
-    
-    // set plugin list back to enabled
-    iMainContainer->SetDimmed(EFalse);
-    
-    // refresh and set menus etc. in correct state
-    RefreshViewL();
-    }
-
-// End of File