devicediagnostics/devdiagapp/src/devdiagsuitecontainer.cpp
changeset 0 3ce708148e4d
child 2 a5fecba4b1e4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devicediagnostics/devdiagapp/src/devdiagsuitecontainer.cpp	Thu Dec 17 08:40:12 2009 +0200
@@ -0,0 +1,440 @@
+/*
+* 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:  Main container that displayes suites.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "devdiagsuitecontainer.h"
+#include "devdiagengine.h"   
+
+#include <StringLoader.h>
+#include <aknlists.h>
+#include <DiagPlugin.h>  
+#include <DiagPluginPool.h> 
+#include <DiagSuitePlugin.h>   
+#include <AknIconArray.h>           // CAknIconArray
+#include <AknIconUtils.h>           // AknIconUtils
+#include <gulicon.h>                // CGulIcon
+
+#include <eikclbd.h>                // CColumnListBoxData
+#include <AknIconArray.h>
+#include <AknsUtils.h>
+#include <textresolver.h>
+
+///@@@KSR: changes for BAD Warnings - KNSmlTab" was declared but never referenced
+//_LIT( KNSmlTab,     "\t" );
+_LIT( KListSuiteElementFormat,  "%d\t%S" );
+
+const TInt KIconArrayGranularity(5);
+
+// ========================== MEMBER FUNCTIONS =================================
+
+// -----------------------------------------------------------------------------
+// CDevDiagSuiteContainer::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CDevDiagSuiteContainer* CDevDiagSuiteContainer::NewL( CDevDiagSuiteView* aView,
+                                                         CDevDiagEngine& aEngine,
+                                                const TRect&    aRect )
+    {
+    CDevDiagSuiteContainer* self = new( ELeave ) 
+                                     CDevDiagSuiteContainer( aView, aEngine );
+    
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect );
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CDevDiagSuiteContainer::CDevDiagSuiteContainer
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CDevDiagSuiteContainer::CDevDiagSuiteContainer( CDevDiagSuiteView* aView,
+                                                    CDevDiagEngine& aEngine )
+    : iView( aView ), iEngine(aEngine)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CDevDiagSuiteContainer::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CDevDiagSuiteContainer::ConstructL( const TRect& aRect )
+    {
+    CreateWindowL();
+
+	iListBox = new ( ELeave ) CAknSingleLargeStyleListBox;
+	
+	iListBox->SetContainerWindowL( *this );
+	iListBox->ConstructL( this, EAknListBoxSelectionList );
+
+	iListBox->CreateScrollBarFrameL( ETrue );
+	iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( 
+	                                            CEikScrollBarFrame::EOff,
+	                                            CEikScrollBarFrame::EAuto );
+       
+    CArrayPtr< CGulIcon >* icons = new ( ELeave ) CAknIconArray(
+        KIconArrayGranularity );
+   
+    iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );
+    
+	iListBox->UpdateScrollBarsL();
+	//iListBox->ScrollBarFrame()->MoveVertThumbTo( 0 );		
+
+	iListBox->SetListBoxObserver( this );
+			
+    SetRect( aRect );
+    ActivateL();    
+    }
+
+// -----------------------------------------------------------------------------
+// CDevDiagSuiteContainer::~CDevDiagSuiteContainer
+// -----------------------------------------------------------------------------
+//
+CDevDiagSuiteContainer::~CDevDiagSuiteContainer()
+    {
+    delete iListBox;
+        
+    //iChildren.ResetAndDestroy();
+    iChildren.Close();
+    }
+    
+// -----------------------------------------------------------------------------
+// CDevDiagSuiteContainer::SizeChanged
+// -----------------------------------------------------------------------------
+//
+void CDevDiagSuiteContainer::SizeChanged()
+    {
+    iListBox->SetRect( Rect() );    // Mandatory, otherwise not drawn
+    }
+
+// -----------------------------------------------------------------------------
+// CDevDiagSuiteContainer::HandleResourceChange
+// -----------------------------------------------------------------------------
+//
+void CDevDiagSuiteContainer::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()->ColumnData()->IconArray();
+            if ( iconArray )
+                {
+    	        iconArray->ResetAndDestroy();
+	            delete iconArray;
+	            iconArray = NULL;
+    	        }
+    	    TRAP_IGNORE( AddIconsL() );
+        	}
+
+        TRect mainPaneRect;
+        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
+        SetRect( mainPaneRect );
+		DrawDeferred();
+		}	
+    }
+
+// -----------------------------------------------------------------------------
+// CDevDiagSuiteContainer::CountComponentControls
+// -----------------------------------------------------------------------------
+//
+TInt CDevDiagSuiteContainer::CountComponentControls() const
+    {
+    TInt retval( 0 );
+    if ( iListBox )
+        {
+        retval = 1;
+        }
+    return retval; // return nbr of controls inside this container
+    }
+
+// -----------------------------------------------------------------------------
+// CDevDiagSuiteContainer::ComponentControl
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CDevDiagSuiteContainer::ComponentControl( TInt aIndex ) const
+    {
+    switch ( aIndex )
+        {
+        case 0:
+            {
+            return iListBox;
+            }
+        default:
+            {
+            return NULL;
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CDevDiagSuiteContainer::Draw
+// -----------------------------------------------------------------------------
+//
+void CDevDiagSuiteContainer::Draw( const TRect& /* aRect */ ) const
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CDevDiagSuiteContainer::HandleControlEventL
+// -----------------------------------------------------------------------------
+//
+
+void CDevDiagSuiteContainer::HandleControlEventL( CCoeControl* /* aControl */,
+                                                TCoeEvent /* aEventType */ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CDevDiagSuiteContainer::OfferKeyEventL
+// -----------------------------------------------------------------------------
+//
+
+TKeyResponse CDevDiagSuiteContainer::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;
+	}
+
+// -----------------------------------------------------------------------------
+// CDevDiagSuiteContainer::HandleListBoxEventL
+// -----------------------------------------------------------------------------
+//
+void CDevDiagSuiteContainer::HandleListBoxEventL( CEikListBox* /*aListBox*/, 
+                                                 TListBoxEvent aEventType )
+	{	
+	// if the Select Key has been pressed
+	if ((aEventType == MEikListBoxObserver::EEventEnterKeyPressed) ||
+	(aEventType == MEikListBoxObserver::EEventItemClicked))
+		{ 
+		
+		}
+	}
+
+
+#ifdef __SERIES60_HELP
+// -----------------------------------------------------------------------------
+// CDevDiagSuiteContainer::GetHelpContext
+// -----------------------------------------------------------------------------
+//
+void CDevDiagSuiteContainer::GetHelpContext( TCoeHelpContext& /*aContext*/ ) const
+	{	
+	//aContext.iMajor = KUidSmlSyncApp;
+    //aContext.iContext = KDM_HLP_DIAGNOSTICS_APPLICATION;
+	}
+
+#else
+
+// -----------------------------------------------------------------------------
+// CDevDiagSuiteContainer::GetHelpContext
+// -----------------------------------------------------------------------------
+//
+void CDevDiagSuiteContainer::GetHelpContext( TCoeHelpContext& /*aContext*/ ) const
+	{
+	}
+#endif // __SERIES60_HELP
+
+// -----------------------------------------------------------------------------
+// CDevDiagSuiteContainer::FocusChanged
+// -----------------------------------------------------------------------------
+//
+void CDevDiagSuiteContainer::FocusChanged( TDrawNow /*aDrawNow*/ )
+	{
+	if ( iListBox )
+		{
+		iListBox->SetFocus( IsFocused() );
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// Display a group of plug-ins that are under the parent suite. 
+// -----------------------------------------------------------------------------
+//
+void CDevDiagSuiteContainer::DisplayChildrenL( TUid aParentUid )
+    {
+    iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
+
+    // Add listbox items.
+    CDesCArray* pluginTextArray = static_cast< CDesCArray* >(
+        iListBox->Model()->ItemTextArray() );
+    pluginTextArray->Reset();
+
+    // Get the root suite.
+    MDiagPlugin* plugin;
+    HBufC* formattedName = NULL;
+    if ( iEngine.PluginPool().FindPlugin( aParentUid, plugin ) == KErrNone )
+        {
+
+        iChildren.Reset(); //plug-ins are owned by the engine.
+       
+        MDiagSuitePlugin* suite = static_cast< MDiagSuitePlugin* >( plugin );
+        suite->GetChildrenL( iChildren, MDiagSuitePlugin::ESortByPosition );
+        
+        AddIconsL(); //Update icon array to match texts
+     
+        for ( TInt j = 0; j < iChildren.Count(); j++ )
+            {            
+            HBufC* name = iChildren[j]->GetPluginNameL(
+                MDiagPlugin::ENameLayoutListSingle );
+            CleanupStack::PushL( name );           
+            
+            formattedName = HBufC::NewLC( name->Length() + 
+                                        KListSuiteElementFormat().Length() );
+            formattedName->Des().Format( KListSuiteElementFormat(), j ,name );    
+                
+            pluginTextArray->AppendL( *formattedName );
+            
+            CleanupStack::PopAndDestroy( formattedName );
+            CleanupStack::PopAndDestroy( name );
+            }
+                
+        iListBox->SetFocus( ETrue );
+        iListBox->HandleItemAdditionL();
+        iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
+        iListBox->DrawDeferred();
+        }
+    else 
+        {
+        User::Leave(KErrNotFound);
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// Append aPlugin name onto the listbox.
+// -----------------------------------------------------------------------------
+//
+void CDevDiagSuiteContainer::DisplayPluginL( MDiagPlugin* aPlugin )
+    {
+    iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
+
+    // Add listbox items.
+    CDesCArray* pluginTextArray = static_cast< CDesCArray* >(
+        iListBox->Model()->ItemTextArray() );
+        
+    iChildren.Append( aPlugin );
+                           
+    HBufC* name = aPlugin->GetPluginNameL(
+                MDiagPlugin::ENameLayoutListSingle );
+    CleanupStack::PushL( name );           
+    
+    CArrayPtr< CGulIcon >* icons =
+        iListBox->ItemDrawer()->ColumnData()->IconArray();
+          
+    icons->AppendL( aPlugin->CreateIconL() );
+            
+    HBufC* formattedName = HBufC::NewLC( name->Length() + 
+                                  KListSuiteElementFormat().Length() );
+    formattedName->Des().Format( KListSuiteElementFormat(), (iChildren.Count() -1), name );    
+                
+    pluginTextArray->AppendL( *formattedName );
+            
+    CleanupStack::PopAndDestroy( formattedName );
+    CleanupStack::PopAndDestroy( name );
+                                   
+    iListBox->SetFocus( ETrue );
+    iListBox->HandleItemAdditionL();
+    iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
+    iListBox->DrawDeferred();
+    }
+
+// -----------------------------------------------------------------------------
+// Returns currently selected plug-in.
+// -----------------------------------------------------------------------------
+//
+void CDevDiagSuiteContainer::SelectedPlugin(MDiagPlugin*& aPlugin) const
+    {
+    aPlugin = iChildren[ iListBox->CurrentItemIndex() ];
+    }
+
+// -----------------------------------------------------------------------------
+// CDevDiagSuiteContainer::AddIconsL
+// -----------------------------------------------------------------------------
+//
+void CDevDiagSuiteContainer::AddIconsL()
+    {        
+    CArrayPtr<CGulIcon>* icons = NULL;
+    
+    if ( !iListBox->ItemDrawer()->ColumnData()->IconArray() )         
+        {
+        icons = new (ELeave) CArrayPtrFlat<CGulIcon>(KIconArrayGranularity);
+        iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );
+        }
+    else 
+        {
+        icons = iListBox->ItemDrawer()->ColumnData()->IconArray();
+        }
+    	
+    for ( TInt i = 0; i < iChildren.Count(); ++i )
+        {
+        icons->AppendL( iChildren[i]->CreateIconL( ));
+        }   
+    }
+
+
+
+
+// End of File