diff -r f0f2b8682603 -r 3ff3fecb12fe sysanadatacapture/piprofiler/piprofilerui/gui/src/profiler_gui_mainview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysanadatacapture/piprofiler/piprofilerui/gui/src/profiler_gui_mainview.cpp Thu Feb 11 15:52:57 2010 +0200 @@ -0,0 +1,330 @@ +/* +* 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.hrh" +#include "profiler_gui_mainview.h" +#include "profiler_gui_maincontainer.h" +#include "profiler_gui_document.h" +#include "profiler_gui_model.h" +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CProfilerGuiMainView::ConstructL(const TRect& aRect) +// EPOC two-phased constructor +// --------------------------------------------------------- +// +void CProfilerGuiMainView::ConstructL() + { + BaseConstructL( R_PROFILER_GUI_VIEW_MAIN ); + + iModel = static_cast(reinterpret_cast(iEikonEnv->AppUi())->Document())->Model(); + iNaviDecorator = NULL; + iModel->SetMainView(this); + } + +// --------------------------------------------------------- +// CProfilerGuiMainView::~CProfilerGuiMainView() +// --------------------------------------------------------- +// +CProfilerGuiMainView::~CProfilerGuiMainView() + { + + if(iNaviDecorator) + { + delete iNaviDecorator; + iNaviDecorator = NULL; + } + + if (iContainer) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer = NULL; + } + + } + +// --------------------------------------------------------- +// TUid CProfilerGuiMainView::Id() +// --------------------------------------------------------- +// +TUid CProfilerGuiMainView::Id() const + { + return KMainViewUID; + } + +// --------------------------------------------------------- +// TUid CProfilerGuiMainView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) +// --------------------------------------------------------- +// +void CProfilerGuiMainView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) + { + AppUi()->DynInitMenuPaneL(aResourceId, aMenuPane); + } + + +// --------------------------------------------------------- +// CProfilerGuiMainView::HandleCommandL(TInt aCommand) +// --------------------------------------------------------- +// +void CProfilerGuiMainView::HandleCommandL(TInt aCommand) + { + switch ( aCommand ) + { + // commands from sampler control sub menu + case EProfilerGuiCmdSamplerEnable: + { + iModel->DisableOrEnableSelectedOrHighlightedItemsL(); + break; + } + case EProfilerGuiCmdSamplerDisable: + { + iModel->DisableOrEnableSelectedOrHighlightedItemsL(); + break; + } + case EProfilerGuiCmdSamplerSettings: + { + // check if sampler settings dialog returned exit command + iModel->EditSelectedSamplerL(iContainer->CurrentListBoxItemIndex()); + break; + } + case EProfilerGuiCmdSamplerInfo: + { + iModel->SelectedSamplerInfoL(iContainer->CurrentListBoxItemIndex()); + break; + } + + case EProfilerGuiCmdStartAll: + { + // still using the old way of starting all the samplers simultaneously + if( iModel->iState != MProfilerStatusObserver::ERunning ) + { + // set state as "initializing" for a moment before profiling has started, + // NOTE: engine changes to "Running" state + iModel->iState = MProfilerStatusObserver::EInitializing; + // start the actual sampling process on Profiler Engine + iModel->StartAllSamplerItemsL(); + } + + // prevent the control of sampler specific settings during the trace + iContainer->SetDimmed(ETrue); + break; + } + case EProfilerGuiCmdStopAll: + { + // check if still profiling + if( iModel->iState != MProfilerStatusObserver::EIdle ) + { + // set to stopping mode + iModel->iState = MProfilerStatusObserver::EStopping; + // stop actual sampling process on Profiler Engine + iModel->StopAllSamplerItemsL(); + } + + // return the control to sampler specific settings when tracing stopped + iContainer->SetDimmed(EFalse); + + break; + } + + default: + { + AppUi()->HandleCommandL(aCommand); + break; + } + } + } + +// --------------------------------------------------------- +// CProfilerGuiMainView::HandleClientRectChange() +// --------------------------------------------------------- +// +void CProfilerGuiMainView::HandleClientRectChange() + { + if ( iContainer ) + { + iContainer->SetRect( ClientRect() ); + } + } + +// --------------------------------------------------------- +// CProfilerGuiMainView::DoActivateL(...) +// --------------------------------------------------------- +// +void CProfilerGuiMainView::DoActivateL( + const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/) + { + // show wait dialog + CAknGlobalNote* waitDialog = CAknGlobalNote::NewLC(); + waitDialog->SetSoftkeys(R_AVKON_SOFTKEYS_EMPTY); + TInt dialogId = waitDialog->ShowNoteL(EAknGlobalWaitNote, _L("Initializing samplers")); + + // setup the profiler engine status pane + SetupStatusPaneL(); + + // check if container creation succesfull + if (!iContainer) + { + iContainer = new (ELeave) CProfilerGuiMainContainer; + iModel->SetMainContainer(iContainer); + iContainer->SetMopParent(this); + iContainer->ConstructL( ClientRect() ); + iModel->NotifyContainerReadyL(); + AppUi()->AddToStackL( *this, iContainer ); + } + + // remove the wait dialog + waitDialog->CancelNoteL(dialogId); + CleanupStack::PopAndDestroy(); //waitDialog; + } + +// --------------------------------------------------------- +// CProfilerGuiMainView::DoDeactivate() +// --------------------------------------------------------- +// +void CProfilerGuiMainView::DoDeactivate() + { + TRAP_IGNORE(CleanupStatusPaneL()); + + if (iContainer) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer = NULL; + } + } + +void CProfilerGuiMainView::HandleStatusPaneSizeChange() + { + CAknView::HandleStatusPaneSizeChange(); + + TInt result; + TRAP(result, SetupStatusPaneL()); + } + + +void CProfilerGuiMainView::SetupStatusPaneL() + { + TUid naviPaneUid = TUid::Uid(EEikStatusPaneUidNavi); + CEikStatusPaneBase::TPaneCapabilities subPaneNavi = StatusPane()->PaneCapabilities(naviPaneUid); + if(subPaneNavi.IsPresent() && subPaneNavi.IsAppOwned()) + { + CAknNavigationControlContainer* naviPane = static_cast (StatusPane()->ControlL(naviPaneUid)); + if(iNaviDecorator) + { + delete iNaviDecorator; + iNaviDecorator = NULL; + } + + // get the initial status label + HBufC* labelText = GetLabelTextLC(iModel->iState); + iNaviDecorator = naviPane->CreateNavigationLabelL(*labelText); + CleanupStack::PopAndDestroy(labelText); + + naviPane->PushL(*iNaviDecorator); + } + } + +void CProfilerGuiMainView::CleanupStatusPaneL() + { + // destructor for navi pane, called by destructor + TUid naviPaneUid = TUid::Uid(EEikStatusPaneUidNavi); + CEikStatusPaneBase::TPaneCapabilities subPaneNavi = StatusPane()->PaneCapabilities(naviPaneUid); + if(subPaneNavi.IsPresent() && subPaneNavi.IsAppOwned()) + { + CAknNavigationControlContainer* naviPane = static_cast (StatusPane()->ControlL(naviPaneUid)); + if(iNaviDecorator) + { + naviPane->Pop(iNaviDecorator); + delete iNaviDecorator; + iNaviDecorator = NULL; + } + } + } + +HBufC* CProfilerGuiMainView::GetLabelTextLC(TInt aStatus) + { + // get the predefined status text + HBufC* labelText = NULL; + switch(aStatus) + { + case MProfilerStatusObserver::EIdle: + labelText = StringLoader::LoadLC(R_PROFILER_GUI_NAVI_TEXT_IDLE); + break; + case MProfilerStatusObserver::EInitializing: + labelText = StringLoader::LoadLC(R_PROFILER_GUI_NAVI_TEXT_INITIALIZING); + break; + case MProfilerStatusObserver::ERunning: + labelText = StringLoader::LoadLC(R_PROFILER_GUI_NAVI_TEXT_RUNNING); + break; + case MProfilerStatusObserver::EStopping: + labelText = StringLoader::LoadLC(R_PROFILER_GUI_NAVI_TEXT_STOPPING); + break; + case MProfilerStatusObserver::ERestarting: + labelText = StringLoader::LoadLC(R_PROFILER_GUI_NAVI_TEXT_RUNNING); + break; + default: + labelText = StringLoader::LoadLC(R_PROFILER_GUI_NAVI_TEXT_IDLE); + break; + } + return labelText; + } + +void CProfilerGuiMainView::UpdateStatusPaneL( TInt aStatus ) + { + TUid naviPaneUid = TUid::Uid(EEikStatusPaneUidNavi); + CEikStatusPaneBase::TPaneCapabilities subPaneNavi = StatusPane()->PaneCapabilities(naviPaneUid); + // check if navi pane is correctly initialized + if(subPaneNavi.IsPresent() && subPaneNavi.IsAppOwned()) + { + CAknNavigationControlContainer* naviPane = static_cast (StatusPane()->ControlL(naviPaneUid)); + if(iNaviDecorator) + { + delete iNaviDecorator; + iNaviDecorator = NULL; + } + HBufC* labelText; + + // get the right status label text + labelText = GetLabelTextLC(aStatus); + iNaviDecorator = naviPane->CreateNavigationLabelL(*labelText); + CleanupStack::PopAndDestroy(labelText); + + naviPane->PushL(*iNaviDecorator); + } + } + + +// End of File