diff -r 5db69f4c3d06 -r b048e15729d6 piprofilerui/ui/avkon/src/profiler_gui_model.cpp --- a/piprofilerui/ui/avkon/src/profiler_gui_model.cpp Mon Aug 23 15:50:54 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 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// UIDs -#include - -#include -#include - -// 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(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& aAttributes) - { - TSamplerAttributes item; - - TInt count(aAttributes.Count()); - - // loop the attribute array and insert them into view list - for (TInt i(0);iListBox()->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( 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( 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);iCount();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 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* 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; iFind(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