menufw/hierarchynavigator/hnmetadatamodel/src/hnmdmodel.cpp
branchv5backport
changeset 14 1abc632eb502
parent 13 6205fd287e8a
child 20 636d517f67e6
--- a/menufw/hierarchynavigator/hnmetadatamodel/src/hnmdmodel.cpp	Thu Mar 18 14:45:17 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,509 +0,0 @@
-/*
-* 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 <AvkonInternalCRKeys.h>
-
-#include "hnmdmodel.h"
-#include "hnmdsuite.h"
-#include "hnrepositoryobserver.h"
-#include "hnfilter.h"
-#include "hnglobals.h"
-#include "hneventhandler.h"
-#include "hnmdlocalization.h"
-#include "hnxmlmodelprovider.h"
-#include "hnsuitemodelcontainer.h"
-#include "hnitemsorder.h"
-#include "hninterface.h"
-#include "menudebug.h"
-#include "hnconvutils.h"
-#include "hnbitmapidcache.h"
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CHnMdModel::ConstructL( MHnMdModelEventObserver *aModelObserver,
-        CHnSuiteModelContainer * aSuiteModelContainer )
-    {
-    MMPERF(("CHnMetaDataModel::ConstructL - START"));
-    MMPERF(("CHnMetaDataModel::ConstructL - query handler ready"));
-    iLocalization = CHnMdLocalization::NewL();
-    MMPERF(("CHnMetaDataModel::ConstructL - localization ready"));
-    iXmlModelProvider = CHnXmlModelProvider::NewL();
-    MMPERF(("CHnMetaDataModel::ConstructL - bitmap and mask ids cache ready"));
-    iBitmapIdCache = CHnBitmapIdCache::NewL();
-    MMPERF(("CHnMetaDataModel::ConstructL - model privider ready"));
-    iXmlModelProvider->ReloadModelL();
-    MMPERF(("CHnMetaDataModel::ConstructL - model reloaded"));
-
-    iCmnPtrs.iLocalization = iLocalization;
-    iCmnPtrs.iIdGenerator = &iIdGenerator;
-    iCmnPtrs.iModel = this;
-    iCmnPtrs.iXmlModelProvider = iXmlModelProvider;
-    iCmnPtrs.iContainer = aSuiteModelContainer;
-    iCmnPtrs.iModelEventObserver = aModelObserver;
-    iCmnPtrs.iBitmapIdCache = iBitmapIdCache;
-
-    THnMdCommonPointers::SetStatic(&iCmnPtrs);
-
-    iMode = EMdModeNormal;
-    iRepositoryWidgetTypeObserver = CHnRepositoryWidgetTypeObserver::NewL( &iCmnPtrs, KMatrixRepositoryUid );
-    iRepositoryShowFolderObserver = CHnRepositoryShowFolderObserver::NewL( &iCmnPtrs, KCRUidMenu, KMenuShowFolder );
-    MMPERF(("CHnMetaDataModel::ConstructL - rep. observer ready"));
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CHnMdModel* CHnMdModel::NewL(
-        MHnMdModelEventObserver* aModelObserver,
-        CHnSuiteModelContainer * aSuiteModelContainer  )
-    {
-    CHnMdModel* self = CHnMdModel::NewLC( aModelObserver,
-            aSuiteModelContainer );
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CHnMdModel* CHnMdModel::NewLC(
-        MHnMdModelEventObserver* aModelObserver,
-        CHnSuiteModelContainer * aSuiteModelContainer )
-    {
-    CHnMdModel* self = new( ELeave ) CHnMdModel();
-    CleanupStack::PushL( self );
-    self->ConstructL( aModelObserver, aSuiteModelContainer );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CHnMdModel::CHnMdModel()
-    {
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CHnMdModel::~CHnMdModel()
-    {
-    delete iRepositoryWidgetTypeObserver;
-    delete iRepositoryShowFolderObserver;
-    iLoadedSuites.ResetAndDestroy();
-    delete iXmlModelProvider;
-    delete iLocalization;
-    delete iBitmapIdCache;
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TInt CHnMdModel::HandleBackEventL(
-        CHnSuiteModelContainer* aMulContainer,
-        const TDesC& aSuiteName,
-        TInt aIterations )
-    {
-    TInt ret( KErrNotFound );
-#ifdef _DEBUG
-    // check if genres match
-    CHnMdSuite* lastMdModel = GetLastSuite();
-    ASSERT( !lastMdModel->SuiteName().Compare( aSuiteName ) );
-#endif
-
-    TInt countDown( aIterations );
-    CHnSuiteModel* current = NULL;
-    while( ( current = aMulContainer->GetParentSuiteModel() ) != NULL &&
-            countDown > 0 )
-        {
-        current = aMulContainer->GetLastSuiteModel();
-        // pop the suite model
-        aMulContainer->PopSuiteModelL( current->SuiteName() );
-
-        // remove the suite that we are leaving
-        DeleteLastSuite();
-        countDown--;
-        }
-
-    current = aMulContainer->GetLastSuiteModel();
-    current->GetItemsOrder()->MarkSuiteUninitialized();
-    CHnFilter* filter = CHnFilter::NewLC();
-    filter->SetSuiteNameL( current->SuiteName() );
-    filter->SetSuiteId( current->CustomId() );
-    GetLastSuite()->MarkEvaluationL( *filter, *current);
-    CleanupStack::PopAndDestroy( filter );
-    //Evaluate suite at the top (if needed)
-    EvaluateTopSuiteL();
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CHnMdModel::HandleSisInstallationEventL(
-        CHnSuiteModelContainer* /*aModelContainer*/ )
-    {
-    iXmlModelProvider->ReloadModelL();
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CHnMdModel::ReloadStackSuitesL( CHnSuiteModelContainer* aModelContainer )
-	{
-    RPointerArray< CLiwGenericParamList > paramsArray;
-    CleanupResetAndDestroyPushL( paramsArray );
-
-    TBool rootDisplayed( iLoadedSuites.Count() == 1 );
-    while( iLoadedSuites.Count() > 0 )
-        {
-        // break loop to leave root suite on the stack
-        if( ( iLoadedSuites.Count() == 1 && paramsArray.Count() > 0 )
-                || rootDisplayed )
-            {
-            break;
-            }
-
-        CHnMdSuite* suite = GetLastSuite();
-        if( iXmlModelProvider->SuiteExistsL( suite->SuiteName() ) )
-            {
-            CLiwGenericParamList* suiteParams = CLiwGenericParamList::NewL();
-            CleanupStack::PushL( suiteParams );
-            suiteParams->AppendL( suite->GetSuiteParameters() );
-            paramsArray.Append( suiteParams );
-            CleanupStack::Pop( suiteParams );
-            }
-        aModelContainer->PopSuiteModelL( suite->SuiteName() );
-        DeleteLastSuite();
-        }
-
-    TInt err( KErrNone );
-    CHnFilter* filter = CHnFilter::NewLC();
-    filter->SetEvaluateSuiteL( ETrue );
-
-    SetModeL( iMode );
-
-    for( TInt i( paramsArray.Count() - 1 ); i >= 0 && !err; i-- )
-        {
-        CLiwGenericParamList* suiteParams = CLiwGenericParamList::NewL();
-        CleanupStack::PushL(suiteParams);
-        suiteParams->AppendL( *(paramsArray[ i ]));
-        TInt pos( 0 );
-        const TLiwGenericParam* param = suiteParams->FindFirst( pos, KSuiteName8 );
-        if ( param && pos >= 0)
-            {
-            TPtrC suiteName;
-            param->Value().Get( suiteName );
-            err = LoadSuiteL( suiteName, suiteParams );
-            }
-        CleanupStack::PopAndDestroy( suiteParams );
-
-        GetLastSuite()->SetModeL( iMode );
-        GetLastSuite()->MarkEvaluationL(
-                *filter, *iCmnPtrs.iContainer->GetLastSuiteModel() );
-        GetLastSuite()->EvaluateL( *iCmnPtrs.iContainer->GetLastSuiteModel() );
-        }
-
-    CleanupStack::PopAndDestroy( filter );
-    CleanupStack::PopAndDestroy( &paramsArray );
-	}
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CHnMdModel::DeleteLastSuite()
-    {
-    CHnMdSuite* tmpPtr = GetLastSuite();
-    iLoadedSuites.Remove( iLoadedSuites.Count() - 1 );
-    delete tmpPtr;
-    }
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CHnMdModel::ReleaseLocalization()
-    {
-    iLocalization->ReleaseResourceFiles();
-    iXmlModelProvider->ResetCache();
-    }
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CHnMdModel::ReloadLocalizationL()
-    {
-    iLocalization->ReloadResourceFilesL();
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CHnMdModel::EvaluateL()
-    {
-    CHnFilter* empty = CHnFilter::NewLC();
-    EvaluateL( *empty );
-    CleanupStack::PopAndDestroy( empty );
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CHnMdModel::SetModeL( TMdMode aMode )
-    {
-    iMode = aMode;
-    for ( TInt i( 0 ); i < iLoadedSuites.Count(); i++ )
-        {
-        CHnMdSuite* suite = iLoadedSuites[i];
-        ASSERT( suite != NULL );
-        suite->SetModeL( aMode );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CHnMdSuite* CHnMdModel::GetLastSuite()
-    {
-    return (iLoadedSuites.Count()>0)
-            ? iLoadedSuites[ iLoadedSuites.Count()-1 ]
-            : NULL;
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CHnMdModel::IgnoreEvaluations( TBool aIgnore )
-    {
-    iIgnoreEvaluations = aIgnore;
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CHnMdModel::QueueForeground(
-        TForegroundGainTriggeringEvent aWhen )
-    {
-    switch ( aWhen )
-        {
-        case EWhenAnySuiteIsEvaluated:
-            iForegroundQueued = ETrue;
-            iForegroundTriggeringSuite = NULL;
-            break;
-        case EWhenCurrentTopSuiteIsEvaluated:
-            iForegroundQueued = ETrue;
-            iForegroundTriggeringSuite = iCmnPtrs.iContainer->GetLastSuiteModel();
-            break;
-        case ENever:
-            iForegroundQueued = EFalse;
-            iForegroundTriggeringSuite = NULL;
-            break;
-        default:
-            ASSERT( 0 );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TBool CHnMdModel::IsForegroundQueued() const
-	{
-	return iForegroundQueued;
-	}
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CHnMdModel::SuiteModelReadyToShowL( CHnSuiteModel* aJustEvaluatedSuite )
-    {
-    if ( !aJustEvaluatedSuite )
-        {
-        User::Leave( KErrArgument );
-        }
-
-    if ( IsForegroundQueued() && ( !iForegroundTriggeringSuite ||
-            iForegroundTriggeringSuite == aJustEvaluatedSuite ) )
-    	{
-    	CLiwGenericParamList* pl = CLiwGenericParamList::NewL();
-    	CleanupStack::PushL( pl );
-    	iCmnPtrs.iModelEventObserver->HandleModelEventL( KAppGainForeground, *pl );
-    	CleanupStack::PopAndDestroy( pl );
-    	QueueForeground( ENever );
-    	}
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CHnMdSuite* CHnMdModel::GetSuite( TInt aPosition )
-    {
-    return ( (aPosition >= 0) && (aPosition < iLoadedSuites.Count()) )
-            ? iLoadedSuites[ aPosition ]
-            : NULL;
-    }
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CLiwGenericParamList& CHnMdModel::GetSuiteParameters( TInt aPosition )
-    {
-    return GetSuite( aPosition )->GetSuiteParameters();
-    }
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CHnMdModel::EvaluateL( CHnFilter& aFilter )
-    {
-    for ( TInt i = iLoadedSuites.Count() - 1; i >= 0; i-- )
-        {
-        iLoadedSuites[i]->MarkEvaluationL( aFilter, *iCmnPtrs.iContainer->GetSuiteModel(i) );
-        if( i == iLoadedSuites.Count() - 1 && !iIgnoreEvaluations )
-            {
-            iLoadedSuites[i]->EvaluateL( *iCmnPtrs.iContainer->GetSuiteModel(i) );
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TInt CHnMdModel::LoadSuiteL( const TDesC& aGenre,
-        CLiwGenericParamList* aSuiteParams )
-    {
-    TInt err( KErrNone );
-
-	RXmlEngDocument xmlDoc;
-	// Xml model provider takes ownership of xmlDoc.
-	TRAP( err, iXmlModelProvider->GetModelL( aGenre, xmlDoc ) );
-
-	TXmlEngElement element;
-    if ( !err )
-        {
-        element = xmlDoc.DocumentElement().AsElement();
-        if ( element.Name() != KContentElementName8 )
-            {
-            err = KErrCorrupt;
-            }
-        }
-
-    if ( !err )
-        {
-        CHnMdSuite* newSuite = CHnMdSuite::NewLC( element, &iCmnPtrs );
-
-        if (aSuiteParams)
-            {
-            newSuite->SetSuiteParametersL( *aSuiteParams );
-            }
-
-        TInt pos( 0 );
-        newSuite->GetSuiteParameters().FindFirst( pos, KSuiteName8);
-        if ( pos == KErrNotFound )
-        	{
-        	newSuite->GetSuiteParameters().AppendL(
-        			TLiwGenericParam(KSuiteName8, TLiwVariant( aGenre ) ) );
-        	}
-
-        iCmnPtrs.iContainer->PushNewSuiteModelL( newSuite->SuiteName() );
-        iCmnPtrs.iContainer->GetLastSuiteModel()->GetItemsOrder()->
-            SetSuiteId( iCmnPtrs.iIdGenerator->GetNextId() );
-
-        CleanupStack::Pop( newSuite );
-        iLoadedSuites.AppendL( newSuite );
-        }
-    else
-    	{
-    	MMPERF(("CHnMdModel::LoadSuiteL - Error TRAPPED!"));
-    	}
-
-    return err;
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TBool CHnMdModel::SuiteModelExistsL( const TDesC8& aSuiteModel )
-    {
-    TBool res( EFalse );
-    HBufC* suiteName = HnConvUtils::Str8ToStrLC( aSuiteModel );
-    res = iXmlModelProvider->SuiteExistsL( *suiteName ) ||
-            aSuiteModel.Compare( KRoot8 ) == KErrNone ;
-    CleanupStack::PopAndDestroy( suiteName );
-    return res;
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CHnMdModel::GetCurrentUriL( TDes& aUri )
-    {
-    iXmlModelProvider->ReloadModelL();
-
-    aUri.Append( KPrefMm );
-    for( TInt i(0); i < iLoadedSuites.Count(); i++ )
-        {
-        aUri.Append( iLoadedSuites[ i ]->SuiteName() );
-        aUri.Append( KSlash );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CHnMdModel::EvaluateTopSuiteL()
-    {
-    if ( !iIgnoreEvaluations )
-        {
-        TInt topItem = iLoadedSuites.Count() - 1;
-        iLoadedSuites[topItem]->EvaluateL( *iCmnPtrs.iContainer->GetSuiteModel(topItem) );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-TInt CHnMdModel::LoadedSuitesCount()
-	{
-	return iLoadedSuites.Count();
-	}
-
-