diff -r 75a71fdb4c92 -r 7d11f9a6646f devicediagnostics/devdiagapp/src/devdiagplugincontainer.cpp --- a/devicediagnostics/devdiagapp/src/devdiagplugincontainer.cpp Tue Feb 02 00:03:17 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,683 +0,0 @@ -/* -* Copyright (c) 2007-2007 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: Implementation of diagnostics components -* -*/ - - -// INCLUDE FILES - -#include "devdiagplugincontainer.h" -#include "devdiagengine.h" -#include "devdiag.pan" -#include "devdiagutil.h" //Time conversion functions - -#include -#include -#include -#include -#include -#include -#include // CColumnListBoxData -#include -#include -#include // popup dialogs -#include -#include -#include -#include -#include -#include -#include -#include - - -#include -///@@@KSR: changes for BAD Warnings - #177-D: variable "KDiagSpace" was declared but never referenced -//_LIT( KDiagSpace, " " ); -_LIT( KListTestElementFormatDouble, "%d\t%S\t%S" ); -_LIT( KDevDiagAppIconFileName, "\\resource\\apps\\devdiagapp.mif"); - -const TInt KLastResultTextLength(256); -const TInt KIconArrayGranularity(20); - -//INCORRECT! -const MDiagPlugin::TNameLayoutType KLayoutType( MDiagPlugin::ENameLayoutListSingle ); - - -// ========================== MEMBER FUNCTIONS ================================= - -// ----------------------------------------------------------------------------- -// CDevDiagPluginContainer::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CDevDiagPluginContainer* CDevDiagPluginContainer::NewL( CDevDiagPluginView* aView, - CDevDiagEngine& aEngine, - const TRect& aRect ) - { - CDevDiagPluginContainer* self = new( ELeave ) - CDevDiagPluginContainer( aView, aEngine ); - - CleanupStack::PushL( self ); - self->ConstructL( aRect ); - CleanupStack::Pop(); - - return self; - } - -// ----------------------------------------------------------------------------- -// CDevDiagPluginContainer::CDevDiagPluginContainer -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CDevDiagPluginContainer::CDevDiagPluginContainer( CDevDiagPluginView* aView, - CDevDiagEngine& aEngine ) - : iView( aView ), iEngine(aEngine), iModelUpdated( EFalse ) - { - } - -// ----------------------------------------------------------------------------- -// CDevDiagPluginContainer::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CDevDiagPluginContainer::ConstructL( const TRect& aRect ) - { - LOGSTRING( "CDevDiagPluginContainer::ConstructL" ); - CreateWindowL(); - - iListBox = new ( ELeave ) CAknDoubleLargeStyleListBox; - - iListBox->SetContainerWindowL( *this ); - iListBox->ConstructL( this, EAknListBoxSelectionList ); - - iListBox->CreateScrollBarFrameL( ETrue ); - iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( - CEikScrollBarFrame::EOff, - CEikScrollBarFrame::EAuto ); - - AddIconsL(); - - iListBox->UpdateScrollBarsL(); - //iListBox->ScrollBarFrame()->MoveVertThumbTo( 0 ); - - iListBox->SetListBoxObserver( this ); - - SetRect( aRect ); - ActivateL(); - } - -// ----------------------------------------------------------------------------- -// CDevDiagPluginContainer::~CDevDiagPluginContainer -// ----------------------------------------------------------------------------- -// -CDevDiagPluginContainer::~CDevDiagPluginContainer() - { - delete iListBox; - - //Do not call ResetAndDestroy, because plug-ins are not owned. - iChildren.Close(); - } - -// ----------------------------------------------------------------------------- -// CDevDiagPluginContainer::SizeChanged -// ----------------------------------------------------------------------------- -// -void CDevDiagPluginContainer::SizeChanged() - { - iListBox->SetRect( Rect() ); // Mandatory, otherwise not drawn - } - -// ----------------------------------------------------------------------------- -// CDevDiagPluginContainer::HandleResourceChange -// ----------------------------------------------------------------------------- -// -void CDevDiagPluginContainer::HandleResourceChange( TInt aType ) - { - CCoeControl::HandleResourceChange( aType ); - - //Handle change in layout orientation - if ( aType == KEikDynamicLayoutVariantSwitch || - aType == KAknsMessageSkinChange ) - { - if ( aType == KAknsMessageSkinChange ) - { - // Skin changed; we'll have to reload the icon array - CArrayPtr* iconArray = - iListBox->ItemDrawer()->FormattedCellData()->IconArray(); - if ( iconArray ) - { - iconArray->ResetAndDestroy(); - delete iconArray; - iconArray = NULL; - } - TRAP_IGNORE( AddIconsL() ); - } - - TRect mainPaneRect; - AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect ); - SetRect( mainPaneRect ); - DrawDeferred(); - } - } - -// ----------------------------------------------------------------------------- -// CDevDiagPluginContainer::CountComponentControls -// ----------------------------------------------------------------------------- -// -TInt CDevDiagPluginContainer::CountComponentControls() const - { - TInt retval( 0 ); - if ( iListBox ) - { - retval = 1; - } - return retval; // return nbr of controls inside this container - } - -// ----------------------------------------------------------------------------- -// CDevDiagPluginContainer::ComponentControl -// ----------------------------------------------------------------------------- -// -CCoeControl* CDevDiagPluginContainer::ComponentControl( TInt aIndex ) const - { - switch ( aIndex ) - { - case 0: - { - return iListBox; - } - default: - { - return NULL; - } - } - } - -// ----------------------------------------------------------------------------- -// CDevDiagPluginContainer::Draw -// ----------------------------------------------------------------------------- -// -void CDevDiagPluginContainer::Draw( const TRect& /* aRect */ ) const - { - } - - -// ----------------------------------------------------------------------------- -// CDevDiagPluginContainer::HandleControlEventL -// ----------------------------------------------------------------------------- -// - -void CDevDiagPluginContainer::HandleControlEventL( CCoeControl* /* aControl */, - TCoeEvent /* aEventType */ ) - { - } - -// ----------------------------------------------------------------------------- -// CDevDiagPluginContainer::OfferKeyEventL -// ----------------------------------------------------------------------------- -// - -TKeyResponse CDevDiagPluginContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent, - TEventCode aType ) - { - - if ( iListBox && aType == EEventKey ) - { - switch ( aKeyEvent.iCode ) - { - case EStdKeyHome: - { - - break; - - } - - case EKeyEscape: - { - - iAvkonAppUi->ProcessCommandL( EEikCmdExit ); - - break; - } - case EKeyUpArrow: - case EKeyDownArrow: - { - TKeyResponse retVal = - iListBox->OfferKeyEventL( aKeyEvent, aType ); - return retVal; - } - case EKeyLeftArrow: - case EKeyRightArrow: - { - break; // AppUi handles the tab changes - } - default: - { - return iListBox->OfferKeyEventL( aKeyEvent, aType ); - } - } - } - - return EKeyWasNotConsumed; - } - - - - -// ----------------------------------------------------------------------------- -// CDevDiagPluginContainer::HandleListBoxEventL -// ----------------------------------------------------------------------------- -// -void CDevDiagPluginContainer::HandleListBoxEventL( CEikListBox* /*aListBox*/, - TListBoxEvent aEventType ) - { - // if the Select Key has been pressed - if ((aEventType == MEikListBoxObserver::EEventEnterKeyPressed) || - (aEventType == MEikListBoxObserver::EEventItemClicked)) - { - - } - } - -#ifdef __SERIES60_HELP -// ----------------------------------------------------------------------------- -// CDevDiagPluginContainer::GetHelpContext -// ----------------------------------------------------------------------------- -// -void CDevDiagPluginContainer::GetHelpContext( TCoeHelpContext& /*aContext */ ) const - { - //aContext.iMajor = KUidSmlSyncApp; - //aContext.iContext = KDM_HLP_DIAGNOSTICS_APPLICATION; - } - -#else - -// ----------------------------------------------------------------------------- -// CDevDiagPluginContainer::GetHelpContext -// ----------------------------------------------------------------------------- -// -void CDevDiagPluginContainer::GetHelpContext( TCoeHelpContext& /*aContext*/ ) const - { - } -#endif // __SERIES60_HELP - -// ----------------------------------------------------------------------------- -// CDevDiagPluginContainer::FocusChanged -// ----------------------------------------------------------------------------- -// -void CDevDiagPluginContainer::FocusChanged( TDrawNow /*aDrawNow*/ ) - { - if ( iListBox ) - { - iListBox->SetFocus( IsFocused() ); - } - } - - -// ----------------------------------------------------------------------------- -// Change text of the focused item into "Testing ..." -// ----------------------------------------------------------------------------- -// -void CDevDiagPluginContainer::DisplayStartTestingL() - { - LOGSTRING( "CDevDiagPluginContainer::DisplayStartTestingL" ); - __ASSERT_ALWAYS( iModelUpdated, - Panic( EDevDiagListboxModelNotUpdated ) ); - - // Add listbox items. - CDesCArray* pluginTextArray = static_cast< CDesCArray* >( - iListBox->Model()->ItemTextArray() ); - - __ASSERT_ALWAYS( pluginTextArray->Count() == iChildren.Count(), - Panic( EDevDiagListboxContainerModel ) ); - - MDiagPlugin* plugin; - HBufC* formattedName = NULL; - - SelectedPlugin ( plugin ); - - HBufC* name = plugin->GetPluginNameL( KLayoutType ); - CleanupStack::PushL( name ); - - HBufC* testingText = StringLoader::LoadL( R_DIAG_LST_TEST_ONGOING ); - CleanupStack::PushL ( testingText ); - - formattedName = HBufC::NewLC( name->Length() + - KListTestElementFormatDouble().Length() + - testingText->Length() ); - formattedName->Des().Format( KListTestElementFormatDouble(), 0, name, testingText ); - - TInt index = iListBox->CurrentItemIndex(); - pluginTextArray->Delete( index ); - - pluginTextArray->InsertL( index, *formattedName ); - - CleanupStack::PopAndDestroy( formattedName ); - CleanupStack::PopAndDestroy( testingText ); - CleanupStack::PopAndDestroy( name ); - - iListBox->SetFocus( ETrue ); - iListBox->HandleItemAdditionL(); - iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue ); - iListBox->DrawDeferred(); - } - -// ----------------------------------------------------------------------------- -// Move "Testing ..." one step lower. This is needed when a group of plug-ins -// are executed. -// ----------------------------------------------------------------------------- -// - void CDevDiagPluginContainer::MoveStartTestingDownL() - { - if ( iListBox->CurrentItemIndex() + 1 < iChildren.Count() ) - { - iListBox->SetCurrentItemIndex ( iListBox->CurrentItemIndex() +1 ); - DisplayStartTestingL(); - } - } - - -// ----------------------------------------------------------------------------- -// Set focus at the beginning of the listbox. -// ----------------------------------------------------------------------------- -// -void CDevDiagPluginContainer::ResetL() - { - iListBox->SetCurrentItemIndexAndDraw ( 0 ); - } - - -// ----------------------------------------------------------------------------- -// Create the plug-in model. -// The function needs to know the parent uid and its children are loaded. -// ----------------------------------------------------------------------------- -// -void CDevDiagPluginContainer::UpdateModelL( TUid aParentSuiteUid ) - { - LOGSTRING( "CDevDiagPluginContainer::UpdateModelL" ); - MDiagPlugin* plugin; - if ( iEngine.PluginPool().FindPlugin( aParentSuiteUid, plugin ) == KErrNone ) - { - iChildren.Reset(); //plug-ins are owned by the engine. - - MDiagSuitePlugin* suite = static_cast< MDiagSuitePlugin* >( plugin ); - suite->GetChildrenL( iChildren, MDiagSuitePlugin::ESortByPosition ); - - iModelUpdated = ETrue; - } - else - { - Panic( EDevDiagListboxFindPluginFailure ); - } - } - - -// ----------------------------------------------------------------------------- -// The plug-in execution was not performed. Display the text on the listbox. -// ----------------------------------------------------------------------------- -// -void CDevDiagPluginContainer::DisplayNotPerformedL( CDesCArray& aListboxModel, - MDiagPlugin*& aPlugin ) - { - LOGSTRING( "CDevDiagPluginContainer::DisplayNotPerformedL" ); - HBufC* name = aPlugin->GetPluginNameL( KLayoutType ); - - CleanupStack::PushL( name ); - - HBufC* result = GetPluginResultL( ENotPerformed ); - CleanupStack::PushL( result ); - - HBufC* formattedName = HBufC::NewLC( name->Length() + - result->Length() + - KListTestElementFormatDouble().Length() ); - formattedName->Des().Format( KListTestElementFormatDouble(), 0, name, result); - - aListboxModel.AppendL( *formattedName ); - - CleanupStack::PopAndDestroy( formattedName ); - CleanupStack::PopAndDestroy( result ); - - CleanupStack::PopAndDestroy( name ); - } - - -// ----------------------------------------------------------------------------- -// Display icon and test result for the plug-in. -// ----------------------------------------------------------------------------- -// -void CDevDiagPluginContainer::DisplayLastResultL( CDesCArray& aListboxModel, - MDiagPlugin*& aPlugin, - CDiagResultsDatabaseItem& aItem ) - { - LOGSTRING( "CDevDiagPluginContainer::DisplayLastResultL" ); - - HBufC* name = aPlugin->GetPluginNameL( KLayoutType ); - CleanupStack::PushL( name ); - - TBuf execTime; - - TTime started = aItem.TimeStarted(); - - if ( TDevDiagUtil::IsToday(started)) - { - TDevDiagUtil::GetTimeTextL( execTime, started ); - LOGTEXT( execTime ); - } - else - { - TDevDiagUtil::GetDateTextL( execTime, started ); - LOGTEXT( execTime ); - } - - TInt iconIndex = -1; - - HBufC* result = ConvertResultLC( execTime, iconIndex, &aItem ); - - HBufC* formattedName = HBufC::NewLC( name->Length() + - result->Length() + - KListTestElementFormatDouble().Length()); - - // Format icon index, then the name of the plug-in and then time. - formattedName->Des().Format( KListTestElementFormatDouble(), - iconIndex, - name, - result); - - aListboxModel.AppendL( *formattedName ); - - CleanupStack::PopAndDestroy( formattedName ); - CleanupStack::PopAndDestroy( result ); - CleanupStack::PopAndDestroy( name ); - } - - -// ----------------------------------------------------------------------------- -// Refresh the listbox with last results. -// ----------------------------------------------------------------------------- -// -void CDevDiagPluginContainer::DisplayChildrenWithResultsL( - RPointerArray& aArray ) - { - LOGSTRING( "CDevDiagPluginContainer::DisplayChildrenWithResultsL" ); - - __ASSERT_ALWAYS( iModelUpdated, - Panic( EDevDiagListboxModelNotUpdated ) ); - - // arrays must match - __ASSERT_ALWAYS( aArray.Count() == iChildren.Count(), - Panic( EDevDiagContainerArrayMismatch ) ); - - iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray ); - - // Add listbox items. - CDesCArray* pluginTextArray = static_cast< CDesCArray* >( - iListBox->Model()->ItemTextArray() ); - pluginTextArray->Reset(); - - // Go through the last result list - for (TInt i = 0; i < aArray.Count(); ++i) - { - if ( !aArray[i] ) //Item has not been performed (last result not found) - { - LOGSTRING2("Item number: %d was null", i ); - DisplayNotPerformedL( *pluginTextArray, iChildren[i] ); - } - else //last result found, display a test result - { - LOGSTRING2("Result found: %d", i ); - DisplayLastResultL( *pluginTextArray, iChildren[i], *aArray[i] ); - } - } - - iListBox->SetFocus( ETrue ); - iListBox->HandleItemAdditionL(); - iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue ); - iListBox->DrawDeferred(); - - LOGSTRING( "CDevDiagPluginContainer::DisplayChildrenWithResultsL end" ); - } - - -// ----------------------------------------------------------------------------- -// Get localised test result text. -// ----------------------------------------------------------------------------- -// -HBufC* CDevDiagPluginContainer::GetPluginResultL( TContainerResult aResult ) const - { - LOGSTRING( "CDevDiagPluginContainer::GetPluginResultL" ); - - switch ( aResult ) - { - case ESuccess: - return StringLoader::LoadL( R_DIAG_LST_TEST_PASS ); - - case EFailed: - return StringLoader::LoadL ( R_DIAG_LST_TEST_FAILED ); - - case ENotPerformed: - return StringLoader::LoadL( R_DIAG_LIST_NOT_PERFORMED ); - - default: - Panic( EDevDiagApplicationInvalidResultIndex ); - } - - return NULL; - } - - -// ----------------------------------------------------------------------------- -// Get localised test result text and the icon array -// ----------------------------------------------------------------------------- -// -HBufC* CDevDiagPluginContainer::ConvertResultLC( const TDesC& aString, - TInt& aIconIndex, - CDiagResultsDatabaseItem* aResult ) const - { - LOGSTRING( "CDevDiagPluginContainer::ConvertResultL" ); - if ( !aResult ) - { - return StringLoader::LoadLC( R_DIAG_LIST_NOT_PERFORMED ); - } - - switch ( aResult->TestResult() ) - { - case CDiagResultsDatabaseItem::ESuccess: - aIconIndex = 1; - return StringLoader::LoadLC( R_DIAG_LST_TEST_PASS, aString ); - - case CDiagResultsDatabaseItem::EFailed: - aIconIndex = 2; - return StringLoader::LoadLC ( R_DIAG_LST_TEST_FAILED, aString ); - case CDiagResultsDatabaseItem::ESkipped: - case CDiagResultsDatabaseItem::ECancelled: - case CDiagResultsDatabaseItem::EQueuedToRun: - { - return StringLoader::LoadLC( R_DIAG_LIST_NOT_PERFORMED ); - } - - default: - LOGSTRING2("PANIC: Results item had a result: %d ", aResult->TestResult() ); - Panic( EDevDiagApplicationInvalidResultIndex ); - } - - return NULL; - } - -void CDevDiagPluginContainer::SelectedPlugin(MDiagPlugin*& aPlugin) - { - LOGSTRING( "CDevDiagPluginContainer::SelectedPluginL" ); - aPlugin = iChildren[ iListBox->CurrentItemIndex() ]; - } - -// ----------------------------------------------------------------------------- -// Load icons. -// -// Icons are: -// Not performed -// Passed -// Failed -// ----------------------------------------------------------------------------- -// -void CDevDiagPluginContainer::AddIconsL() - { - LOGSTRING( "CDevDiagPluginContainer::AddIconsL" ); - CArrayPtr* icons = new (ELeave) CArrayPtrFlat - (KIconArrayGranularity); - - iListBox->ItemDrawer()->FormattedCellData()->SetIconArray( icons ); - - CFbsBitmap* bitmap = NULL; - CFbsBitmap* mask = NULL; - - LOGSTRING( "CDevDiagPluginContainer::AddIconsL 1" ); - - AknIconUtils::CreateIconL( - bitmap, - mask, - KDevDiagAppIconFileName(), - EMbmDevdiagappQgn_prop_cp_diag_not, - EMbmDevdiagappQgn_prop_cp_diag_not_mask ); - - icons->AppendL( CGulIcon::NewL( bitmap, mask )); - - LOGSTRING( "CDevDiagPluginContainer::AddIconsL 2" ); - - AknIconUtils::CreateIconL( - bitmap, - mask, - KDevDiagAppIconFileName(), - EMbmDevdiagappQgn_prop_cp_diag_pass, - EMbmDevdiagappQgn_prop_cp_diag_pass_mask ); - - LOGSTRING( "CDevDiagPluginContainer::AddIconsL 3" ); - - icons->AppendL( CGulIcon::NewL( bitmap, mask )); - - AknIconUtils::CreateIconL( - bitmap, - mask, - KDevDiagAppIconFileName(), - EMbmDevdiagappQgn_prop_cp_diag_fail, - EMbmDevdiagappQgn_prop_cp_diag_fail_mask ); - - // Create the icon. - icons->AppendL( CGulIcon::NewL( bitmap, mask )); - - LOGSTRING( "CDevDiagPluginContainer::AddIconsL end" ); - } - -// End of File