menufw/hierarchynavigator/hnmetadatamodel/src/hnmdsuite.cpp
changeset 0 f72a12da539e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/menufw/hierarchynavigator/hnmetadatamodel/src/hnmdsuite.cpp	Thu Dec 17 08:40:49 2009 +0200
@@ -0,0 +1,881 @@
+/*
+* Copyright (c) 2007-2008 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 <mmf/common/mmfcontrollerpluginresolver.h>
+
+#include "hnmdsuite.h"
+#include "hnmditem.h"
+#include "hnmdmodel.h"
+#include "hnstringhandler.h"
+#include "hnsuitemodelcontainer.h"
+#include "hnitemsorder.h"
+#include "hnconvutils.h"
+#include "hnliwutils.h"
+#include "hnutils.h"
+#include "hnfilter.h"
+#include "menudebug.h"
+#include "hnactionmodel.h"
+#include "hnmdaction.h"
+#include "hnmdservicecommand.h"
+#include "hnmdlocalization.h"
+#include "hnmdqueries.h"
+#include "hnmdquery.h"
+#include "hnrepositorymanager.h"
+#include "hnmdbasekey.h"
+#include "hninterface.h"
+#include "hnservicehandler.h"
+#include "hnmdeventmapping.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C CLiwGenericParamList& CHnMdSuite::GetSuiteParameters()
+    {
+    return *iSuiteParams;
+    }
+ 
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CHnMdSuite::SetSuiteParametersL(CLiwGenericParamList& aParams)
+    {
+    iSuiteParams->Reset();
+    iSuiteParams->AppendL( aParams );               
+    }
+    
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::ConstructL( TXmlEngElement aElement )
+    {
+    DEBUG(("_MM_: CHnMdSuite::ConstructL IN"));
+
+    // append localization elements
+    iCmnPtrs->iLocalization->AppendLocalizationsL( aElement );
+    
+    RXmlEngNodeList<TXmlEngElement> elements;
+    CleanupClosePushL( elements );
+    aElement.GetChildElements( elements );
+    
+    // suite element was found
+    TBool suiteFound( EFalse );
+    
+    // one suite per file
+    TXmlEngElement suiteElement;
+    while ( elements.HasNext() )
+        {
+        suiteElement = elements.Next();
+        if ( !suiteElement.Name().Compare( KSuiteElementName8 ) )
+            {
+            suiteFound = ETrue;
+            break;
+            }
+        }
+    
+    if ( suiteFound )
+        {
+        // set event mapping
+        iEventMapping = CHnMdEventMapping::NewL( suiteElement, iCmnPtrs );
+   
+        // set genre
+        SetGenreL( suiteElement.AttributeNodeL( KGenreAttrName8 ) );
+        
+        // set widget type
+        // widget needs to be set before template will be set
+        SetWidgetTypeL( suiteElement.AttributeNodeL( KWidgetTypeAttrName8 ) );
+        
+        // set template
+        SetTemplateL( suiteElement.AttributeNodeL( KTemplateAttrName8 ) );
+        
+        // set name
+        SetTitleL( suiteElement.AttributeNodeL( KTitleAttrName8 ) );
+        
+        // set empty text
+        SetEmptyTextL( suiteElement.AttributeNodeL( KEmptyTextAttrName8 ) );
+        
+        // set custom identifier
+        SetCustomIdL( suiteElement );
+            
+        // set entries
+        CreateItemsL( suiteElement, iCmnPtrs );
+        
+        // set queries
+        iQueries = CHnMdQueries::NewL( suiteElement );
+        
+        // set cached parameters
+        iSuiteParams = CLiwGenericParamList::NewL();
+        }
+    else
+        {
+        // definiotion of the suite was not found!
+        DEBUG(("_MM_: CHnMdSuite::ConstructL Suite definition not found!"));
+        User::Leave( KErrNotFound );
+        }
+    
+    CleanupStack::PopAndDestroy( &elements );
+    DEBUG(("_MM_: CHnMdSuite::ConstructL OUT"));
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CHnMdSuite* CHnMdSuite::NewL(TXmlEngElement aElement,
+                                            THnMdCommonPointers* aCmnPtrs)
+    {
+    CHnMdSuite* self = CHnMdSuite::NewLC( aElement, aCmnPtrs );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CHnMdSuite* CHnMdSuite::NewLC(TXmlEngElement aElement,
+                                            THnMdCommonPointers* aCmnPtrs)
+    {
+    CHnMdSuite* self = new( ELeave ) CHnMdSuite( aCmnPtrs );
+    CleanupStack::PushL( self );
+    self->ConstructL( aElement );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CHnMdSuite::CHnMdSuite( THnMdCommonPointers* aCmnPtrs )
+    : iCmnPtrs( aCmnPtrs ), iAllowableTemplate(NULL)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CHnMdSuite::~CHnMdSuite()
+    {
+    iAllowableWidgetType.Close();
+    delete iAllowableTemplate;
+    delete iEventMapping;
+    iSuiteName.Close();
+    iItems.ResetAndDestroy();
+    iTemplate.Close();
+    iTitle.Close();
+    iEmptyText.Close();
+    iCustomId8.Close();
+    delete iQueries;
+    delete iSuiteParams;
+    iAllowedTypes.Close();
+    delete iQc;
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHnMdSuite::EvaluateL( CHnSuiteModel & aSuiteModel )
+    {
+    MMPERF(("CHnMdSuite::EvaluateL - START"));
+    aSuiteModel.GetItemsOrder()->DefineModelItemCountL( iItems.Count() );
+    if( iEvaluationNeeded )
+        {
+        EvaluateSuiteItselfL( aSuiteModel );
+        MMPERF(("CHnMdSuite::EvaluateL - suite evaluated"));
+        iEvaluationNeeded = EFalse;
+        }
+    for( TInt i( 0 ); i < iItems.Count(); i++ )
+    	{
+    	CHnMdItem * item = iItems[i];
+    	item->SetAlternativeTemplateL( GetAlternativeWidgetNumber() );
+    	item->EvaluateItemL( aSuiteModel, GetSuiteParameters(), i );
+    	}
+    
+    MMPERF(("CHnMdSuite::EvaluateL - items evaluated - DONE"));
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::MarkEvaluationL( CHnFilter& aFilter, CHnSuiteModel& aSuiteModel )
+    {  
+    if (aFilter.HasSuiteId())
+        {
+        if (aSuiteModel.CustomId() == aFilter.SuiteId() )
+            {
+            if ( aFilter.IsEvaluateSuite() )
+                {
+                iEvaluationNeeded = ETrue;
+                }
+            for (TInt item(0); item < iItems.Count(); item++)
+               {
+               iItems[item]->MarkEvaluationL( aFilter );
+               }
+            }
+        else
+            {
+            for (TInt itemIter(0); itemIter < iItems.Count(); itemIter++)
+                {
+                RArray< TInt > ids;
+                CleanupClosePushL( ids );
+                aSuiteModel.GetItemsOrder()->GetIdsForL( itemIter, ids);
+                for (TInt idsIter(0); idsIter < ids.Count(); idsIter++)
+                    {
+                    if (aFilter.SuiteId() == ids[idsIter])
+                        {
+                        iItems[itemIter]->MarkEvaluationL( aFilter );
+                        if (aFilter.IsEvaluateSuite())
+                            {
+                            iEvaluationNeeded = ETrue;
+                            }
+                        }
+                    }                        
+                CleanupStack::PopAndDestroy( &ids );
+                }
+            }
+        }
+    else if( aFilter.HasSuiteName() )
+        {
+        if( !SuiteName().Compare( aFilter.SuiteName()) )
+            {
+            if ( aFilter.IsEvaluateSuite() )
+                {
+                iEvaluationNeeded = ETrue;
+                }    
+            for( TInt i( 0 ); i < iItems.Count(); i++ )
+                {
+                iItems[i]->MarkEvaluationL( aFilter );
+                } 
+            } 
+        }
+    else
+        {
+        if( aFilter.IsEvaluateSuite() )
+            {
+            iEvaluationNeeded = ETrue;
+            }
+        for( TInt i( 0 ); i < iItems.Count(); i++ )
+           {
+           iItems[i]->MarkEvaluationL( aFilter );
+           } 
+        }
+    }
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::CreateItemsL( TXmlEngElement aElement,
+                        THnMdCommonPointers* aCmnPtrs )
+    {
+    ASSERT( aElement.Name() == KSuiteElementName8 );
+
+    // construction...
+    RXmlEngNodeList< TXmlEngElement > elements;
+    CleanupClosePushL( elements );
+    aElement.GetChildElements( elements );
+
+    TInt elementsCount = elements.Count();
+
+    for (TInt j = 0; j < elementsCount; j++ )
+        {
+        TXmlEngElement element = elements.Next();
+        if ( !element.Name().Compare( KItemElementName8 ) )
+            {
+            CHnMdItem *item = CHnMdItem::NewL( element, aCmnPtrs );
+            CleanupStack::PushL( item );
+            iItems.AppendL( item );
+            CleanupStack::Pop( item );
+            }
+        }
+    CleanupStack::PopAndDestroy( &elements );
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SetGenreL(const TDesC& aGenre)
+    {
+    iSuiteName.Close();
+    iSuiteName.CreateL( aGenre );
+    iSuiteName.LowerCase();
+    DEBUG16(("\t_MM_: suite attribute (genre): %S", &aGenre ));
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SetGenreL(TXmlEngAttr aGenre)
+    {
+    HBufC* genre = HnConvUtils::Str8ToStrLC( aGenre.Value() );
+    SetGenreL(*genre);
+    // clean up
+    CleanupStack::PopAndDestroy(genre);
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SetTemplateL( TXmlEngAttr aTemplate )
+    {
+    SetTemplateL( aTemplate.Value() );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SetTemplateL( const TDesC8& aTemplate )
+    {
+    delete iAllowableTemplate;
+    iAllowableTemplate = NULL;
+    iAllowableTemplate = new ( ELeave ) CDesC8ArrayFlat( 3 );
+    
+    for (int i = 0; i < HnUtils::GetColumnTextColumnCount( aTemplate ); i++)
+        {
+        HBufC8* templateBuf = HnUtils::GetColumnTextLC( i, aTemplate );
+        templateBuf->Des().Trim();
+        iAllowableTemplate->AppendL( *templateBuf );
+        CleanupStack::PopAndDestroy(templateBuf);
+        }
+    SetAlternativeTemplateL( GetAlternativeWidgetNumber() );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::AddInternalStateL( CLiwGenericParamList& aParamList )
+    {
+    TLiwGenericParam param;
+    param.PushL();
+    
+    CLiwDefaultMap* suiteMap = CLiwDefaultMap::NewL();
+    suiteMap->PushL();
+
+    TLiwVariant suiteWidgetTypeVariant;
+    suiteWidgetTypeVariant.PushL();
+    
+    CLiwDefaultMap* widgetTypeMap = CLiwDefaultMap::NewL();
+    widgetTypeMap->PushL();
+
+    if ( iWidgetType == EGridWidget )
+        {
+        widgetTypeMap->InsertL( KWidgetType8(), KWidgetTypeGrid8() );
+        }
+    else if ( iWidgetType == EListWidget )
+        {
+        widgetTypeMap->InsertL( KWidgetType8(), KWidgetTypeList8() );
+        }
+    else if ( iWidgetType == ECoverFlowWidget )
+        {
+        widgetTypeMap->InsertL( KWidgetType8(), KWidgetTypeCoverFlow8() );
+        }
+    
+    widgetTypeMap->InsertL( KAllowedTypes8(), iAllowedTypes );
+    
+    suiteWidgetTypeVariant.Set( widgetTypeMap );
+    
+    // add suite widget type
+    suiteMap->InsertL( KSuite8(), suiteWidgetTypeVariant );
+    aParamList.Remove( KMm8 );
+    
+    // set internal state
+    param.SetNameAndValueL( KMm8, TLiwVariant( suiteMap ) );
+    aParamList.AppendL( param );
+
+    CleanupStack::PopAndDestroy( widgetTypeMap );
+    CleanupStack::PopAndDestroy( &suiteWidgetTypeVariant );
+    CleanupStack::PopAndDestroy( suiteMap );
+    CleanupStack::PopAndDestroy( &param );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::DoSetWidgetTypeL( TDesC8 & aConfDes )
+    {
+    if ( !aConfDes.Compare( KWidgetTypeGrid8 ))
+        {
+        iAllowableWidgetType.AppendL( EGridWidget );
+        }
+    else if ( !aConfDes.Compare( KWidgetTypeList8 ) )
+        {
+        iAllowableWidgetType.AppendL( EListWidget );        
+        }
+    else if ( !aConfDes.Compare( KWidgetTypeCoverFlow8 ) )
+        {
+        iAllowableWidgetType.AppendL( ECoverFlowWidget );                
+        }
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CHnMdSuite::GetAlternativeWidgetNumber()
+    {
+    return iAllowableWidgetType.Find( iWidgetType );
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SetAlternativeTemplateL( TInt aOption )
+    {
+    iTemplate.Close();
+    if (aOption >= 0 && aOption < iAllowableTemplate->Count())
+        {
+        const TDesC8 & val = (*iAllowableTemplate)[aOption];
+        iTemplate.CreateL(val.Length());
+        iTemplate.Copy(val);
+        iTemplate.Trim();
+        }
+    else
+        {
+        iTemplate.CreateL( KNullDesC8() );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SetAlternativeTemplateL( CLiwGenericParamList& aParams )
+    {
+    RBuf8 logicalTemplate;
+    logicalTemplate.CleanupClosePushL();
+    if ( KErrNone == HnLiwUtils::GetStringL( 
+            aParams, KTemplatePath8, logicalTemplate ) &&
+            KErrNone != logicalTemplate.Compare( KTemplatePath8 ) &&
+            logicalTemplate.Length() )
+        {
+        SetTemplateL( logicalTemplate );
+        }
+    else
+    	{
+    	SetAlternativeTemplateL( GetAlternativeWidgetNumber() );
+    	}
+    CleanupStack::PopAndDestroy( &logicalTemplate );
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TBool CHnMdSuite::ReadWidgetTypeFromServiceL( CLiwGenericParamList& aParams, 
+        RBuf8& aWidgetType )
+    {
+    return 
+        HnLiwUtils::GetStringL( aParams, KWidgetTypePath8, aWidgetType ) == KErrNone 
+        && aWidgetType.Compare( KWidgetTypePath8 ) !=  KErrNone 
+        && aWidgetType.Length();
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SetAlternativeWidgetL( CLiwGenericParamList& aParams )
+    {
+    RBuf8 widget;
+    widget.CleanupClosePushL();
+    if ( ReadWidgetTypeFromServiceL( aParams, widget )  )
+        {
+        iAllowableWidgetType.Reset();
+        SetWidgetTypeL( widget );
+        }
+    else
+        {
+        ReadWidgetTypeL();
+        }
+    CleanupStack::PopAndDestroy( &widget );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SetWidgetTypeL( TXmlEngAttr aWidgetType )
+    {
+    TPtrC8 widgetType = aWidgetType.Value();
+    DEBUG8(("\t_MM_: suite attribute (widget type): %S", &widgetType));
+
+    SaveWidgetTypeL( widgetType );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SetWidgetTypeL(TDesC8& aWidgetType)
+    {
+    iAllowedTypes.Close();
+    iAllowedTypes.CreateL(aWidgetType);
+    const TInt columnCount(HnUtils::GetColumnTextColumnCount(aWidgetType));
+    for (TInt i = 0; i < columnCount; i++)
+        {
+        HBufC8* type = HnUtils::GetColumnTextLC(i, aWidgetType);
+        type->Des().Trim();
+        DoSetWidgetTypeL(*type);
+        CleanupStack::PopAndDestroy(type);
+        }
+    if (iAllowableWidgetType.Count() <= 0)
+        {
+        User::Leave(KErrCorrupt);
+        }
+    iWidgetType = iAllowableWidgetType[0];
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SaveWidgetTypeL( TDesC8& aWidgetType )
+    {
+    SetWidgetTypeL( aWidgetType );
+    CHnRepositoryManager* repMan = CHnRepositoryManager::NewLC();
+        
+    if ( iAllowableWidgetType.Count() > 0 )
+        {
+        THnSuiteWidgetType crWidgetType( EUnspecified );
+        TInt err( repMan->ReadSuiteWidgetTypeL( iSuiteName, crWidgetType ) );
+        if( !err || err == KErrNotFound )
+            {
+            TInt found = iAllowableWidgetType.Find( crWidgetType );
+            if ( crWidgetType != EUnspecified && found != KErrNotFound )
+                {
+                iWidgetType = crWidgetType;
+                }
+            else
+                {
+                err = repMan->StoreSuiteWidgetTypeL( iSuiteName, iWidgetType );
+                }
+            }
+        }
+            
+    CleanupStack::PopAndDestroy( repMan );
+    }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SetModeL( TMdMode aMode )
+    {
+    if ( iMode != aMode )
+    	{
+	    for( TInt i( 0 ); i < iItems.Count() ; i++ )
+	        {
+	        if( iItems[i]->HasAlternativeModeItem() )
+	            {
+	            CHnMdItem * currentItem = iItems[i];
+	            CHnMdItem * newItem = currentItem->TakeAlternativeModeItem();
+	            newItem->SetAlternativeModeItem( currentItem );
+	            iItems.InsertL( newItem, i );
+	            iItems.Remove( i+1 );
+	            }
+	        }
+	    iMode = aMode;
+    	}
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TMdMode CHnMdSuite::Mode()
+	{
+	return iMode;
+	}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SetTitleL( TXmlEngAttr aTitle )
+    {
+    iTitle.Close();
+    iTitle.CreateL( aTitle.Value().Length() );
+    iTitle.Copy( aTitle.Value() );
+    DEBUG8(("\t_MM_: suite attribute (name): %S", &iTitle));
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SetEmptyTextL( TXmlEngAttr aEmptyText )
+    {
+    iEmptyText.Close();
+    iEmptyText.CreateL( aEmptyText.Value().Length() );
+    iEmptyText.Copy( aEmptyText.Value() );
+    DEBUG8(("\t_MM_: suite attribute (name): %S", &iEmptyText));
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+//
+void CHnMdSuite::EvaluateSuiteItselfL( CHnSuiteModel & aSuiteModel )
+    {
+    
+    DEBUG(("_MM_: CHnMdSuite::EvaluateSuiteItselfL IN"));
+    iSuiteModel = &aSuiteModel;
+    //delete old query collector and create new one
+    //currently running evaluations will be cancelled
+    delete iQc;
+    iQc = NULL;
+    iQc = CHnQueryResultCollector::NewL( *iQueries, GetSuiteParameters() );
+    iQc->StartAsynchL( this );
+    }
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CHnMdSuite::SuiteName()
+    {
+    return iSuiteName;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CHnMdSuite::SaveWidgetTypeL() const
+	{
+	CHnRepositoryManager *repManager = CHnRepositoryManager::NewLC();
+	DEBUG8(("\t_MM_: Saving '%S' widget type to CR: %d", &iSuiteName, iWidgetType));
+	TInt ret( repManager->StoreSuiteWidgetTypeL( iSuiteName, iWidgetType ) );
+	CleanupStack::PopAndDestroy(repManager);
+	return ret;
+	}
+ 
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CHnMdSuite::ReadWidgetTypeL()
+	{
+	TInt ret = KErrNone;
+	
+	if (iAllowableWidgetType.Count() <= 1)
+	    {
+	    DEBUG8(("\t_MM_: Suite '%S' is allowed to have just one widget: %d ", &iSuiteName, iWidgetType));
+	    return ret;
+	    }
+	    
+	CHnRepositoryManager* repManager = CHnRepositoryManager::NewLC();
+	THnSuiteWidgetType widgetType( EUnspecified );
+	TInt err( repManager->ReadSuiteWidgetTypeL( iSuiteName, widgetType ) );
+	if( ( !err || err == KErrNotFound ) && widgetType != EUnspecified )
+		{
+		if ( widgetType == EChangeWidget )
+		    {
+		    ASSERT( iAllowableWidgetType.Find( iWidgetType ) >= 0 );
+		    TInt index = (iAllowableWidgetType.Find( iWidgetType ) + 1) 
+		        % iAllowableWidgetType.Count();
+		    iWidgetType = iAllowableWidgetType[index];
+		    DEBUG8(("\t_MM_: Suite '%S' widget change invoked: %d", &iSuiteName, widgetType));
+		    SaveWidgetTypeL();
+		    }
+		else if ( iAllowableWidgetType.Find( widgetType ) != KErrNotFound )
+		    {
+		    DEBUG8(("\t_MM_: Suite '%S' sets widget: %d from CR", &iSuiteName, widgetType));
+	        iWidgetType = widgetType;
+		    }
+		}
+	CleanupStack::PopAndDestroy( repManager );
+	return ret;
+	}
+ 
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::ResultsCollectedL( CLiwGenericParamList* aResults )
+    {
+    CLiwGenericParamList* queriesResultsList = CLiwGenericParamList::NewLC();
+    queriesResultsList->AppendL( *aResults );
+    queriesResultsList->AppendL( GetSuiteParameters() );
+
+    RBuf title;
+    CleanupClosePushL( title );
+    HnLiwUtils::GetStringL( *queriesResultsList, iTitle, title );
+    
+    RBuf suiteTitle;
+    CleanupClosePushL( suiteTitle );
+    HnStringHandler::LocaliseL( suiteTitle, title, iCmnPtrs );
+    
+    DEBUG16( ( "\t_MM_: SetTitleL: %S", &suiteTitle ) ); 
+    iSuiteModel->SetTitleL( suiteTitle );
+    
+    CleanupStack::PopAndDestroy( &suiteTitle );
+    CleanupStack::PopAndDestroy( &title );
+    
+    RBuf emptyText;
+    CleanupClosePushL( emptyText );
+    HnLiwUtils::GetStringL( *queriesResultsList, iEmptyText, emptyText );
+    
+    RBuf emptyTextLoc;
+    CleanupClosePushL( emptyTextLoc );
+    HnStringHandler::LocaliseL( emptyTextLoc, emptyText, iCmnPtrs );
+    
+    DEBUG16(("\t_MM_: SetEmptyTestL: %S", &emptyTextLoc));
+    iSuiteModel->SetEmptyTextL( emptyTextLoc );
+    
+    CleanupStack::PopAndDestroy( &emptyTextLoc );
+    CleanupStack::PopAndDestroy( &emptyText );
+    
+    // set widget type
+    SetAlternativeWidgetL( *queriesResultsList );
+    iSuiteModel->SetWidgetType( iWidgetType );
+    
+    // set custom id
+    SetCustomIdL( iSuiteModel, *queriesResultsList, 0 );
+    
+    // set exit mode
+    SetExitModeL();
+        
+    // set template 
+    SetAlternativeTemplateL( *queriesResultsList );
+    iSuiteModel->SetTemplateL( iTemplate );
+    
+    // add widget type to aParams
+    AddInternalStateL( GetSuiteParameters() );
+    DEBUG(("\t_MM_: WidgetType: %d", iSuiteModel->WidgetType()));
+            
+    // evaluate actions
+    iEventMapping->FillActionsL( iSuiteModel->GetActions(), 
+            *queriesResultsList );
+    
+    CleanupStack::PopAndDestroy( queriesResultsList );
+
+    iSuiteModel->RefreshMulModelL( iSuiteModel->GetItemsOrder()->Count() );
+    TBool observersNotified = iSuiteModel->SuiteEvaluationFinishedL();
+    if ( observersNotified )
+        {
+        iCmnPtrs->iModel->SuiteModelReadyToShowL( iSuiteModel );
+        }
+    
+    // set uri based highlight
+    SetUriBasedHighlightL();
+
+    //DEBUG16(("\t\t_MM_: SetTemplate: "));
+    DEBUG(("_MM_: CHnMdSuite::ResultsCollectedL OUT"));
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SetUriBasedHighlightL()
+    {
+    RBuf tmp;
+    CleanupClosePushL( tmp );
+    HnLiwUtils::GetStringL( *iSuiteParams, KParamsUriHighlightSuite, tmp );
+    
+    if ( !tmp.Compare( this->iSuiteName ) )
+        {
+        tmp.Close();
+        HnLiwUtils::GetStringL( *iSuiteParams, KParamsUriHighlight, tmp );
+        
+        TLex lexFrag( tmp );
+        TInt highLight( 0 );
+        if( !( lexFrag.Val( highLight ) ) )
+            {
+            iSuiteModel->SetSuiteHighlightL( highLight ); 
+            }
+        }
+
+    CleanupStack::PopAndDestroy( &tmp );
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SetCustomIdL( TXmlEngElement aElement )
+    {
+    iCustomId8.Close();
+    
+    if ( aElement.HasAttributeL( KCustomId8 ) )
+    	{
+    	TPtrC8 av = aElement.AttributeValueL( KCustomId8 );
+    	iCustomId8.CreateL( av );
+    	}
+    else
+    	{
+    	iCustomId8.CreateL( KItemTypeUnknown8 );
+    	}
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SetCustomIdL( CHnSuiteModel* aSuiteModel, 
+		const CLiwGenericParamList& aParams, TInt aPos )
+	{
+	TInt64 customId( KErrNotFound );
+	if ( KErrNone == HnLiwUtils::GetInt64L(
+			aParams, iCustomId8, aPos, customId ) )
+		{
+		aSuiteModel->SetCustomId( customId );
+		}
+	}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHnMdSuite::SetExitModeL()
+    {
+    RBuf exitMode;
+    CleanupClosePushL( exitMode );
+    HnLiwUtils::GetStringL( *iSuiteParams, KExitModeParams, exitMode );
+    
+    if ( !exitMode.Compare( KExitModeHide ) )
+        {
+        iSuiteModel->SetExitMode( EExitModeHide );
+        }
+    else
+        {
+        iSuiteModel->SetExitMode( EExitModeNormal );
+        }
+    
+    CleanupStack::PopAndDestroy( &exitMode );
+    }
+
+
+// End of file