diff -r 000000000000 -r f0f2b8682603 memana/analyzetoolclient/configurationappgui/src/atconfigurationappguiprocessview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/memana/analyzetoolclient/configurationappgui/src/atconfigurationappguiprocessview.cpp Thu Feb 11 15:51:35 2010 +0200 @@ -0,0 +1,601 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "atconfigurationappgui.hrh" +#include "atconfigurationappguiprocessview.h" +#include "atconfigurationappguiprocesscontainer.hrh" +#include "atconfigurationappguilistbox.hrh" +#include "atconfigurationappguiprocesscontainer.h" +#include "atconfigurationappguiappui.h" +#include "atlog.h" + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::CATConfigurationAppGuiProcessView() +// First phase of Symbian two-phase construction. +// ----------------------------------------------------------------------------- +// +CATConfigurationAppGuiProcessView::CATConfigurationAppGuiProcessView() : + iLogOption( EATUseDefault ) + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::CATConfigurationAppGuiProcessView()" ); + + iNaviDecorator_ = NULL; + iProcessContainer = NULL; + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::~CATConfigurationAppGuiProcessView() +// Destructor. +// ----------------------------------------------------------------------------- +// +CATConfigurationAppGuiProcessView::~CATConfigurationAppGuiProcessView() + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::~CATConfigurationAppGuiProcessView()" ); + + if ( iNaviDecorator_ != NULL ) + { + delete iNaviDecorator_; + iNaviDecorator_ = NULL; + } + delete iProcessContainer; + iProcessContainer = NULL; + + // Closes the array and frees all memory allocated to the array. + iLibraries.Close(); + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::NewL() +// Symbian two-phase constructor. +// ----------------------------------------------------------------------------- +// +CATConfigurationAppGuiProcessView* CATConfigurationAppGuiProcessView::NewL() + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::NewL()" ); + + CATConfigurationAppGuiProcessView* self = CATConfigurationAppGuiProcessView::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::NewLC() +// Symbian two-phase constructor. +// ----------------------------------------------------------------------------- +// +CATConfigurationAppGuiProcessView* CATConfigurationAppGuiProcessView::NewLC() + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::NewLC()" ); + + CATConfigurationAppGuiProcessView* self = new ( ELeave ) CATConfigurationAppGuiProcessView(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::ConstructL() +// Second-phase constructor for view. +// ----------------------------------------------------------------------------- +// +void CATConfigurationAppGuiProcessView::ConstructL() + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::ConstructL()" ); + + BaseConstructL( R_ATCONFIGURATION_APP_GUI_PROCESSCONTAINER_VIEW ); + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::Id() +// Returns the UID for this view. +// ----------------------------------------------------------------------------- +// +TUid CATConfigurationAppGuiProcessView::Id() const + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::Id()" ); + + return TUid::Uid( EATConfigurationAppGuiProcessViewId ); + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::HandleCommandL() +// Handle a command for this view. +// ----------------------------------------------------------------------------- +// +void CATConfigurationAppGuiProcessView::HandleCommandL( TInt aCommand ) + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::HandleCommandL()" ); + + // [[[ begin generated region: do not modify [Generated Code] + TBool commandHandled = EFalse; + switch ( aCommand ) + { // Code to dispatch to the AknView's menu and CBA commands is generated here + case EATConfigurationAppGuiProcessView_librariesMenuItemCommand: + RunListQueryL(); + commandHandled = ETrue; + break; + case EAknSoftkeyBack: + { + AppUi()->ActivateLocalViewL( TUid::Uid( EATConfigurationAppGuiListBoxViewId ) ); + commandHandled = ETrue; + break; + } + case EATConfigurationAppGuiProcessViewSettingsMenuItemCommand: + { + AppUi()->ActivateLocalViewL( TUid::Uid( EATConfigurationAppGuiSettingItemListViewId ), + TUid::Uid( EATConfigurationAppGuiProcessViewId ), KNullDesC8 ); + commandHandled = ETrue; + break; + } + case EATConfigurationAppGuiProcessViewEXTILogOption: + { + iLogOption = EATLogToXti; + commandHandled = ETrue; + break; + } + case EATConfigurationAppGuiProcessViewES60LogOption: + { + iLogOption = EATLogToFile; + commandHandled = ETrue; + break; + } + case EATConfigurationAppGuiProcessViewENoneLogOption: + { + iLogOption = EATLoggingOff; + commandHandled = ETrue; + break; + } + case EATConfigurationAppGuiProcessViewStart_subtestMenuItemCommand: + { + CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )iEikonEnv->AppUi(); + appUi->SetProcessSubTestStartL( iProcessId ); + SetupStatusPaneL(); + if ( iProcessContainer ) + { + iProcessContainer->UpdateViewL(); + } + break; + } + case EATConfigurationAppGuiProcessViewStop_subtestMenuItemCommand: + { + CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )iEikonEnv->AppUi(); + appUi->SetProcessSubTestStopL( iProcessId ); + SetupStatusPaneL(); + if ( iProcessContainer ) + { + iProcessContainer->UpdateViewL(); + } + break; + } + default: + break; + } + + if ( !commandHandled ) + { + + if ( aCommand == EAknSoftkeyBack || + aCommand == EATConfigurationAppGuiProcessViewExitMenuItemCommand ) + { + AppUi()->HandleCommandL( EEikCmdExit ); + } + } + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::DynInitMenuPaneL() +// Handles dynamically dimming the menu items. +// ----------------------------------------------------------------------------- +// +void CATConfigurationAppGuiProcessView::DynInitMenuPaneL( TInt aResourceId, + CEikMenuPane* aMenuPane ) + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::DynInitMenuPaneL()" ); + + if ( aResourceId == R_ATCONFIGURATION_APP_GUI_PROCESS_MENU_PANE ) + { + if( iProcessContainer->GetCurrentItemIndex() < 0 ) + { + aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStart_subtestMenuItemCommand, ETrue ); + aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStop_subtestMenuItemCommand, ETrue ); + aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessView_librariesMenuItemCommand, ETrue ); + aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewSet_logging_modeMenuItemCommand, ETrue ); + } + else { + CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )iEikonEnv->AppUi(); + TInt subTest = appUi->IsSubTestRunning( iProcessId ); + if ( subTest > KErrNotFound ) + { + aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStart_subtestMenuItemCommand, ETrue ); + aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStop_subtestMenuItemCommand, EFalse ); + } + else + { + aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStart_subtestMenuItemCommand, EFalse ); + aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStop_subtestMenuItemCommand, ETrue ); + } + + aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessView_librariesMenuItemCommand, EFalse ); + aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewSet_logging_modeMenuItemCommand, ETrue ); + aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewHelpMenuItemCommand, ETrue ); + aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewSettingsMenuItemCommand, ETrue ); + } + } + + if ( aResourceId == R_ATCONFIGURATION_APP_GUI_RADIOBUTTON_MENUPANE ) + { + if ( iLogOption == EATUseDefault ) + aMenuPane->SetItemButtonState( EATConfigurationAppGuiProcessViewEXTILogOption, + EEikMenuItemSymbolOn ); + else if ( iLogOption == EATLogToFile ) + aMenuPane->SetItemButtonState( EATConfigurationAppGuiProcessViewES60LogOption, + EEikMenuItemSymbolOn ); + else if ( iLogOption == EATLogToXti ) + aMenuPane->SetItemButtonState( EATConfigurationAppGuiProcessViewEXTILogOption, + EEikMenuItemSymbolOn ); + else if ( iLogOption == EATLoggingOff ) + aMenuPane->SetItemButtonState( EATConfigurationAppGuiProcessViewENoneLogOption, + EEikMenuItemSymbolOn ); + } + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::DoActivateL() +// Handles user actions during activation of the view. +// ----------------------------------------------------------------------------- +// +void CATConfigurationAppGuiProcessView::DoActivateL( + const TVwsViewId& /*aPrevViewId*/, TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/ ) + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::DoActivateL()" ); + + CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )AppUi(); + iProcessId = appUi->GetCurrentProcessId(); + iProcessStartTime = appUi->GetCurrentProcessStartTime(); + + SetupStatusPaneL(); + + if ( iProcessContainer == NULL ) + { + iProcessContainer = CreateContainerL(); + iProcessContainer->SetMopParent( this ); + AppUi()->AddToStackL( *this, iProcessContainer ); + // For supporting MSK context menu + MenuBar()->SetContextMenuTitleResourceId( R_ATCONFIGURATION_PROCESS_OPTIONS_MENU ); + } + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::DoDeactivate() +// Handles user actions during deactivation of the view. +// ----------------------------------------------------------------------------- +// +void CATConfigurationAppGuiProcessView::DoDeactivate() + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::DoDeactivate()" ); + + TRAP_IGNORE( CleanupStatusPaneL() ); + + if ( iProcessContainer != NULL ) + { + AppUi()->RemoveFromViewStack( *this, iProcessContainer ); + delete iProcessContainer; + iProcessContainer = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::HandleStatusPaneSizeChange() +// Handle status pane size change for this view. +// ----------------------------------------------------------------------------- +// +void CATConfigurationAppGuiProcessView::HandleStatusPaneSizeChange() + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::HandleStatusPaneSizeChange()" ); + + CAknView::HandleStatusPaneSizeChange(); + + // This may fail, but we're not able to propagate exceptions here + TInt result; + TRAP( result, SetupStatusPaneL() ); + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::SetupStatusPaneL() +// ----------------------------------------------------------------------------- +// +void CATConfigurationAppGuiProcessView::SetupStatusPaneL() + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::SetupStatusPaneL()" ); + + // Reset the context pane + TUid contextPaneUid = TUid::Uid( EEikStatusPaneUidContext ); + CEikStatusPaneBase::TPaneCapabilities subPaneContext = + StatusPane()->PaneCapabilities( contextPaneUid ); + if ( subPaneContext.IsPresent() && subPaneContext.IsAppOwned() ) + { + CAknContextPane* context = static_cast< CAknContextPane* > ( + StatusPane()->ControlL( contextPaneUid ) ); + context->SetPictureToDefaultL(); + } + + // Setup the title pane + TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle ); + CEikStatusPaneBase::TPaneCapabilities subPaneTitle = + StatusPane()->PaneCapabilities( titlePaneUid ); + if ( subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned() ) + { + CAknTitlePane* title = static_cast< CAknTitlePane* >( + StatusPane()->ControlL( titlePaneUid ) ); + //TResourceReader reader; + //iEikonEnv->CreateResourceReaderLC( reader, R_ATCONFIGURATION_APP_GUI_TITLE_RESOURCE ); + //title->SetFromResourceL( reader ); + //CleanupStack::PopAndDestroy(); // reader internal state + + // Get process's name + RArray processes; + CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )iEikonEnv->AppUi(); + appUi->StorageServer().GetProcessesL( processes ); + + for ( TInt find = 0 ; find < processes.Count() ; find++ ) + { + TATProcessInfo processInfo = processes[ find ]; + if ( processInfo.iProcessId == iProcessId ) + { + HBufC* name = HBufC::NewLC( processInfo.iProcessName.Length() ); + name->Des().Copy( processInfo.iProcessName ); + title->SetTextL( name->Des(), ETrue ); + CleanupStack::PopAndDestroy( name ); + break; + } + } + // Closes the array and frees all memory allocated to the array. + processes.Close(); + } + + // Set the navi pane content + TUid naviPaneUid = TUid::Uid( EEikStatusPaneUidNavi ); + CEikStatusPaneBase::TPaneCapabilities subPaneNavi = + StatusPane()->PaneCapabilities( naviPaneUid ); + if ( subPaneNavi.IsPresent() && subPaneNavi.IsAppOwned() ) + { + CAknNavigationControlContainer* naviPane = + static_cast< CAknNavigationControlContainer* >( + StatusPane()->ControlL( naviPaneUid ) ); + if ( iNaviDecorator_ != NULL ) + { + delete iNaviDecorator_; + iNaviDecorator_ = NULL; + } + // Check if subtest is running + CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )iEikonEnv->AppUi(); + TInt subTest = appUi->IsSubTestRunning( iProcessId ); + if ( subTest > KErrNotFound ) + { + HBufC* labelText = StringLoader::LoadLC( R_ATCONFIGURATION_APP_GUI_NAVI_TEXT1 ); + iNaviDecorator_ = naviPane->CreateNavigationLabelL( labelText->Des() ); + CleanupStack::PopAndDestroy( labelText ); + } + else + { + iNaviDecorator_ = naviPane->CreateNavigationLabelL( KNullDesC ); + } + naviPane->PushL( *iNaviDecorator_ ); + } + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::CleanupStatusPaneL() +// ----------------------------------------------------------------------------- +// +void CATConfigurationAppGuiProcessView::CleanupStatusPaneL() + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::CleanupStatusPaneL()" ); + + // Reset the navi pane + TUid naviPaneUid = TUid::Uid( EEikStatusPaneUidNavi ); + CEikStatusPaneBase::TPaneCapabilities subPaneNavi = + StatusPane()->PaneCapabilities( naviPaneUid ); + if ( subPaneNavi.IsPresent() && subPaneNavi.IsAppOwned() ) + { + CAknNavigationControlContainer* naviPane = + static_cast< CAknNavigationControlContainer* >( + StatusPane()->ControlL( naviPaneUid ) ); + if ( iNaviDecorator_ != NULL ) + { + naviPane->Pop( iNaviDecorator_ ); + delete iNaviDecorator_; + iNaviDecorator_ = NULL; + } + } + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::CreateContainerL() +// Creates the top-level container for the view. +// ----------------------------------------------------------------------------- +// +CATConfigurationAppGuiProcessContainer* CATConfigurationAppGuiProcessView::CreateContainerL() + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::CreateContainerL()" ); + + return CATConfigurationAppGuiProcessContainer::NewL( + ClientRect(), this, this, iProcessId, iProcessStartTime ); + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::CreateListQuery1ItemL() +// Create a list box item with the given column values. +// ----------------------------------------------------------------------------- +// +void CATConfigurationAppGuiProcessView::CreateListQuery1ItemL( + TDes& aBuffer, const TDesC& aMainText ) + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::CreateListQuery1ItemL()" ); + + _LIT ( KStringHeader, "%S" ); + + aBuffer.Format( KStringHeader(), &aMainText ); + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::CreateListQuery1ResourceArrayItemL() +// Add an item to the list by reading the text items from resource. +// ----------------------------------------------------------------------------- +// +void CATConfigurationAppGuiProcessView::CreateListQuery1ResourceArrayItemL( + TDes& aBuffer, + TInt aResourceId ) + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::CreateListQuery1ResourceArrayItemL()" ); + + CDesCArray* array = CCoeEnv::Static()->ReadDesCArrayResourceL( aResourceId ); + CleanupStack::PushL( array ); + CreateListQuery1ItemL( aBuffer, ( *array ) [ 0 ] ); + CleanupStack::PopAndDestroy( array ); + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::InitializeListQuery1LC() +// Initialize contents of the popup item list. +// ----------------------------------------------------------------------------- +// +CDesCArray* CATConfigurationAppGuiProcessView::InitializeListQuery1LC() + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::InitializeListQuery1LC()" ); + + ( ( CATConfigurationAppGuiAppUi* )AppUi() )->StorageServer().GetLoadedDllsL( iProcessId, iLibraries ); + const int KNumItems = iLibraries.Count(); + CDesCArray* itemArray = new ( ELeave ) CDesCArrayFlat( KNumItems ? KNumItems : 1 ); + CleanupStack::PushL( itemArray ); + // This is intended to be large enough, but if you get + // a USER 11 panic, consider reducing string sizes. + + for ( TInt count = 0 ; count < KNumItems ; count++ ) + { + TBuf<512> des; + TBuf library; + library.Copy( iLibraries[ count ] ); + CreateListQuery1ItemL( des, library ); + itemArray->AppendL( des ); + } + + // Empties the array, so that it is ready to be reused. + iLibraries.Reset(); + return itemArray; + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::SetupListQuery1IconsLC() +// Set up the list query's icon array. +// ----------------------------------------------------------------------------- +// +CArrayPtr< CGulIcon >* CATConfigurationAppGuiProcessView::SetupListQuery1IconsLC() + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::SetupListQuery1IconsLC()" ); + + CArrayPtr< CGulIcon >* icons = NULL; + return icons; + } + +// ----------------------------------------------------------------------------- +// CATConfigurationAppGuiProcessView::RunListQueryL() +// Show the popup list query dialog for listQuery. +// ----------------------------------------------------------------------------- +// +TInt CATConfigurationAppGuiProcessView::RunListQueryL( + const TDesC* aOverrideText, CDesCArray* aOverrideItemArray, + CArrayPtr< CGulIcon >* aOverrideIconArray ) + { + LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::RunListQueryL()" ); + + TInt index = 0; + CAknListQueryDialog* queryDialog = NULL; + queryDialog = new ( ELeave ) CAknListQueryDialog( &index ); + CleanupStack::PushL( queryDialog ); + + queryDialog->PrepareLC( R_ATCONFIGURATION_APP_GUI_LIST_QUERY1 ); + if ( aOverrideText != NULL ) + { + queryDialog->SetHeaderTextL( *aOverrideText ); + } + + // Initialize list items + CDesCArray* itemArray = NULL; + + if ( aOverrideItemArray != NULL ) + { + CleanupStack::PushL( aOverrideItemArray ); + itemArray = aOverrideItemArray; + } + else + { + itemArray = InitializeListQuery1LC(); + } + + queryDialog->SetItemTextArray( itemArray ); + queryDialog->SetOwnershipType( ELbmOwnsItemArray ); + CleanupStack::Pop( itemArray ); + + // Initialize list icons + CArrayPtr< CGulIcon >* iconArray = NULL; + + if ( aOverrideIconArray != NULL ) + { + CleanupStack::PushL( aOverrideIconArray ); + iconArray = aOverrideIconArray; + } + else + { + iconArray = SetupListQuery1IconsLC(); + } + + if ( iconArray != NULL ) + { + queryDialog->SetIconArrayL( iconArray ); // Passes ownership + CleanupStack::Pop( iconArray ); + } + // Enable text scrolling + queryDialog->ListControl()->Listbox()->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue ); + // Run dialog + TInt result = queryDialog->RunLD(); + + // Clean up + CleanupStack::Pop( queryDialog ); + + return result == 0 ? -1 : index; + } + +// End of File