--- 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 <DiagFrameworkDebug.h>
-#include <devdiagapp.rsg>
-#include <DiagPlugin.h>
-#include <DiagPluginPool.h>
-#include <DiagSuitePlugin.h>
-#include <DiagResultsDatabaseItem.h>
-#include <eikclbd.h> // CColumnListBoxData
-#include <aknmessagequerydialog.h>
-#include <data_caging_path_literals.hrh>
-#include <aknPopup.h> // popup dialogs
-#include <StringLoader.h>
-#include <AknQueryDialog.h>
-#include <textresolver.h>
-#include <AknIconArray.h>
-#include <AknsUtils.h>
-#include <featmgr.h>
-#include <AknWaitDialog.h>
-#include <devdiagapp.mbg>
-
-
-#include <AknsUtils.h>
-///@@@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<CGulIcon>* 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<KLastResultTextLength> 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<CDiagResultsDatabaseItem>& 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<CGulIcon>* icons = new (ELeave) CArrayPtrFlat<CGulIcon>
- (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