menufw/hierarchynavigator/hnmetadatamodel/src/hnmdmodel.cpp
changeset 1 5315654608de
parent 0 f72a12da539e
child 54 1b758917cafc
equal deleted inserted replaced
0:f72a12da539e 1:5315654608de
     9 * Initial Contributors:
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    10 * Nokia Corporation - initial contribution.
    11 *
    11 *
    12 * Contributors:
    12 * Contributors:
    13 *
    13 *
    14 * Description:   
    14 * Description:
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 #include <mmf/common/mmfcontrollerpluginresolver.h>
    18 #include <mmf/common/mmfcontrollerpluginresolver.h>
    19 #include <AvkonInternalCRKeys.h>
    19 #include <AvkonInternalCRKeys.h>
    50     MMPERF(("CHnMetaDataModel::ConstructL - bitmap and mask ids cache ready"));
    50     MMPERF(("CHnMetaDataModel::ConstructL - bitmap and mask ids cache ready"));
    51     iBitmapIdCache = CHnBitmapIdCache::NewL();
    51     iBitmapIdCache = CHnBitmapIdCache::NewL();
    52     MMPERF(("CHnMetaDataModel::ConstructL - model privider ready"));
    52     MMPERF(("CHnMetaDataModel::ConstructL - model privider ready"));
    53     iXmlModelProvider->ReloadModelL();
    53     iXmlModelProvider->ReloadModelL();
    54     MMPERF(("CHnMetaDataModel::ConstructL - model reloaded"));
    54     MMPERF(("CHnMetaDataModel::ConstructL - model reloaded"));
    55             
    55 
    56     iCmnPtrs.iLocalization = iLocalization;
    56     iCmnPtrs.iLocalization = iLocalization;
    57     iCmnPtrs.iIdGenerator = &iIdGenerator;
    57     iCmnPtrs.iIdGenerator = &iIdGenerator;
    58     iCmnPtrs.iModel = this;
    58     iCmnPtrs.iModel = this;
    59     iCmnPtrs.iXmlModelProvider = iXmlModelProvider;
    59     iCmnPtrs.iXmlModelProvider = iXmlModelProvider;
    60     iCmnPtrs.iContainer = aSuiteModelContainer;
    60     iCmnPtrs.iContainer = aSuiteModelContainer;
    61     iCmnPtrs.iModelEventObserver = aModelObserver;
    61     iCmnPtrs.iModelEventObserver = aModelObserver;
    62     iCmnPtrs.iBitmapIdCache = iBitmapIdCache;
    62     iCmnPtrs.iBitmapIdCache = iBitmapIdCache;
    63     
    63 
    64     THnMdCommonPointers::SetStatic(&iCmnPtrs);
    64     THnMdCommonPointers::SetStatic(&iCmnPtrs);
    65     
    65 
    66     iMode = EMdModeNormal;
    66     iMode = EMdModeNormal;
    67     iRepositoryWidgetTypeObserver = CHnRepositoryWidgetTypeObserver::NewL( &iCmnPtrs, KMatrixRepositoryUid );
    67     iRepositoryWidgetTypeObserver = CHnRepositoryWidgetTypeObserver::NewL( &iCmnPtrs, KMatrixRepositoryUid );
    68     iRepositoryShowFolderObserver = CHnRepositoryShowFolderObserver::NewL( &iCmnPtrs, KCRUidMenu, KMenuShowFolder );
    68     iRepositoryShowFolderObserver = CHnRepositoryShowFolderObserver::NewL( &iCmnPtrs, KCRUidMenu, KMenuShowFolder );
    69     iRepositoryZoomObserver = CHnRepositoryZoomObserver::NewL( &iCmnPtrs, KCRUidAvkon, KAknGlobalUiZoom );
       
    70     MMPERF(("CHnMetaDataModel::ConstructL - rep. observer ready"));
    69     MMPERF(("CHnMetaDataModel::ConstructL - rep. observer ready"));
    71     }
    70     }
    72 
    71 
    73 // ---------------------------------------------------------------------------
    72 // ---------------------------------------------------------------------------
    74 //
    73 //
    75 // ---------------------------------------------------------------------------
    74 // ---------------------------------------------------------------------------
    76 //
    75 //
    77 EXPORT_C CHnMdModel* CHnMdModel::NewL( 
    76 EXPORT_C CHnMdModel* CHnMdModel::NewL(
    78         MHnMdModelEventObserver* aModelObserver,
    77         MHnMdModelEventObserver* aModelObserver,
    79         CHnSuiteModelContainer * aSuiteModelContainer  )
    78         CHnSuiteModelContainer * aSuiteModelContainer  )
    80     {
    79     {
    81     CHnMdModel* self = CHnMdModel::NewLC( aModelObserver,
    80     CHnMdModel* self = CHnMdModel::NewLC( aModelObserver,
    82             aSuiteModelContainer );
    81             aSuiteModelContainer );
    86 
    85 
    87 // ---------------------------------------------------------------------------
    86 // ---------------------------------------------------------------------------
    88 //
    87 //
    89 // ---------------------------------------------------------------------------
    88 // ---------------------------------------------------------------------------
    90 //
    89 //
    91 EXPORT_C CHnMdModel* CHnMdModel::NewLC( 
    90 EXPORT_C CHnMdModel* CHnMdModel::NewLC(
    92         MHnMdModelEventObserver* aModelObserver,
    91         MHnMdModelEventObserver* aModelObserver,
    93         CHnSuiteModelContainer * aSuiteModelContainer )
    92         CHnSuiteModelContainer * aSuiteModelContainer )
    94     {
    93     {
    95     CHnMdModel* self = new( ELeave ) CHnMdModel();
    94     CHnMdModel* self = new( ELeave ) CHnMdModel();
    96     CleanupStack::PushL( self );
    95     CleanupStack::PushL( self );
   112 //
   111 //
   113 CHnMdModel::~CHnMdModel()
   112 CHnMdModel::~CHnMdModel()
   114     {
   113     {
   115     delete iRepositoryWidgetTypeObserver;
   114     delete iRepositoryWidgetTypeObserver;
   116     delete iRepositoryShowFolderObserver;
   115     delete iRepositoryShowFolderObserver;
   117     delete iRepositoryZoomObserver;
       
   118     iLoadedSuites.ResetAndDestroy();
   116     iLoadedSuites.ResetAndDestroy();
   119     delete iXmlModelProvider;
   117     delete iXmlModelProvider;
   120     delete iLocalization;
   118     delete iLocalization;
   121     delete iBitmapIdCache;
   119     delete iBitmapIdCache;
   122     }
   120     }
   134 #ifdef _DEBUG
   132 #ifdef _DEBUG
   135     // check if genres match
   133     // check if genres match
   136     CHnMdSuite* lastMdModel = GetLastSuite();
   134     CHnMdSuite* lastMdModel = GetLastSuite();
   137     ASSERT( !lastMdModel->SuiteName().Compare( aSuiteName ) );
   135     ASSERT( !lastMdModel->SuiteName().Compare( aSuiteName ) );
   138 #endif
   136 #endif
   139     
   137 
   140     TInt countDown( aIterations );
   138     TInt countDown( aIterations );
   141     CHnSuiteModel* current = NULL;
   139     CHnSuiteModel* current = NULL;
   142     while( ( current = aMulContainer->GetParentSuiteModel() ) != NULL &&
   140     while( ( current = aMulContainer->GetParentSuiteModel() ) != NULL &&
   143             countDown > 0 )
   141             countDown > 0 )
   144         {
   142         {
   145         current = aMulContainer->GetLastSuiteModel();
   143         current = aMulContainer->GetLastSuiteModel();
   146         // pop the suite model
   144         // pop the suite model
   147         aMulContainer->PopSuiteModelL( current->SuiteName() );
   145         aMulContainer->PopSuiteModelL( current->SuiteName() );
   148         
   146 
   149         // remove the suite that we are leaving
   147         // remove the suite that we are leaving
   150         DeleteLastSuite();
   148         DeleteLastSuite();
   151         countDown--;
   149         countDown--;
   152         }
   150         }
   153     
   151 
   154     current = aMulContainer->GetLastSuiteModel();
   152     current = aMulContainer->GetLastSuiteModel();
   155     current->GetItemsOrder()->MarkSuiteUninitialized();
   153     current->GetItemsOrder()->MarkSuiteUninitialized();
   156     CHnFilter* filter = CHnFilter::NewLC();
   154     CHnFilter* filter = CHnFilter::NewLC();
   157     filter->SetSuiteNameL( current->SuiteName() );
   155     filter->SetSuiteNameL( current->SuiteName() );
   158     filter->SetSuiteId( current->CustomId() );
   156     filter->SetSuiteId( current->CustomId() );
   189         if( ( iLoadedSuites.Count() == 1 && paramsArray.Count() > 0 )
   187         if( ( iLoadedSuites.Count() == 1 && paramsArray.Count() > 0 )
   190                 || rootDisplayed )
   188                 || rootDisplayed )
   191             {
   189             {
   192             break;
   190             break;
   193             }
   191             }
   194         
   192 
   195         CHnMdSuite* suite = GetLastSuite();
   193         CHnMdSuite* suite = GetLastSuite();
   196         if( iXmlModelProvider->SuiteExistsL( suite->SuiteName() ) )
   194         if( iXmlModelProvider->SuiteExistsL( suite->SuiteName() ) )
   197             {
   195             {
   198             CLiwGenericParamList* suiteParams = CLiwGenericParamList::NewL();
   196             CLiwGenericParamList* suiteParams = CLiwGenericParamList::NewL();
   199             CleanupStack::PushL( suiteParams );
   197             CleanupStack::PushL( suiteParams );
   202             CleanupStack::Pop( suiteParams );
   200             CleanupStack::Pop( suiteParams );
   203             }
   201             }
   204         aModelContainer->PopSuiteModelL( suite->SuiteName() );
   202         aModelContainer->PopSuiteModelL( suite->SuiteName() );
   205         DeleteLastSuite();
   203         DeleteLastSuite();
   206         }
   204         }
   207     
   205 
   208     TInt err( KErrNone );
   206     TInt err( KErrNone );
   209     CHnFilter* filter = CHnFilter::NewLC();
   207     CHnFilter* filter = CHnFilter::NewLC();
   210     filter->SetEvaluateSuiteL( ETrue );
   208     filter->SetEvaluateSuiteL( ETrue );
   211 
   209 
   212     SetModeL( iMode );
   210     SetModeL( iMode );
   213     
   211 
   214     for( TInt i( paramsArray.Count() - 1 ); i >= 0 && !err; i-- )
   212     for( TInt i( paramsArray.Count() - 1 ); i >= 0 && !err; i-- )
   215         {
   213         {
   216         CLiwGenericParamList* suiteParams = CLiwGenericParamList::NewL();
   214         CLiwGenericParamList* suiteParams = CLiwGenericParamList::NewL();
   217         CleanupStack::PushL(suiteParams);
   215         CleanupStack::PushL(suiteParams);
   218         suiteParams->AppendL( *(paramsArray[ i ]));
   216         suiteParams->AppendL( *(paramsArray[ i ]));
   229         GetLastSuite()->SetModeL( iMode );
   227         GetLastSuite()->SetModeL( iMode );
   230         GetLastSuite()->MarkEvaluationL(
   228         GetLastSuite()->MarkEvaluationL(
   231                 *filter, *iCmnPtrs.iContainer->GetLastSuiteModel() );
   229                 *filter, *iCmnPtrs.iContainer->GetLastSuiteModel() );
   232         GetLastSuite()->EvaluateL( *iCmnPtrs.iContainer->GetLastSuiteModel() );
   230         GetLastSuite()->EvaluateL( *iCmnPtrs.iContainer->GetLastSuiteModel() );
   233         }
   231         }
   234     
   232 
   235     CleanupStack::PopAndDestroy( filter );
   233     CleanupStack::PopAndDestroy( filter );
   236     CleanupStack::PopAndDestroy( &paramsArray );
   234     CleanupStack::PopAndDestroy( &paramsArray );
   237 	}
   235 	}
   238 
   236 
   239 // ---------------------------------------------------------------------------
   237 // ---------------------------------------------------------------------------
   294 //
   292 //
   295 // ---------------------------------------------------------------------------
   293 // ---------------------------------------------------------------------------
   296 //
   294 //
   297 EXPORT_C CHnMdSuite* CHnMdModel::GetLastSuite()
   295 EXPORT_C CHnMdSuite* CHnMdModel::GetLastSuite()
   298     {
   296     {
   299     return (iLoadedSuites.Count()>0) 
   297     return (iLoadedSuites.Count()>0)
   300             ? iLoadedSuites[ iLoadedSuites.Count()-1 ]
   298             ? iLoadedSuites[ iLoadedSuites.Count()-1 ]
   301             : NULL;
   299             : NULL;
   302     }
   300     }
   303 
   301 
   304 // ---------------------------------------------------------------------------
   302 // ---------------------------------------------------------------------------
   353     {
   351     {
   354     if ( !aJustEvaluatedSuite )
   352     if ( !aJustEvaluatedSuite )
   355         {
   353         {
   356         User::Leave( KErrArgument );
   354         User::Leave( KErrArgument );
   357         }
   355         }
   358     
   356 
   359     if ( IsForegroundQueued() && ( !iForegroundTriggeringSuite ||
   357     if ( IsForegroundQueued() && ( !iForegroundTriggeringSuite ||
   360             iForegroundTriggeringSuite == aJustEvaluatedSuite ) )
   358             iForegroundTriggeringSuite == aJustEvaluatedSuite ) )
   361     	{
   359     	{
   362     	CLiwGenericParamList* pl = CLiwGenericParamList::NewL();
   360     	CLiwGenericParamList* pl = CLiwGenericParamList::NewL();
   363     	CleanupStack::PushL( pl );
   361     	CleanupStack::PushL( pl );
   371 //
   369 //
   372 // ---------------------------------------------------------------------------
   370 // ---------------------------------------------------------------------------
   373 //
   371 //
   374 CHnMdSuite* CHnMdModel::GetSuite( TInt aPosition )
   372 CHnMdSuite* CHnMdModel::GetSuite( TInt aPosition )
   375     {
   373     {
   376     return ( (aPosition >= 0) && (aPosition < iLoadedSuites.Count()) ) 
   374     return ( (aPosition >= 0) && (aPosition < iLoadedSuites.Count()) )
   377             ? iLoadedSuites[ aPosition ]
   375             ? iLoadedSuites[ aPosition ]
   378             : NULL;
   376             : NULL;
   379     }
   377     }
   380 // ---------------------------------------------------------------------------
   378 // ---------------------------------------------------------------------------
   381 //
   379 //
   403 
   401 
   404 // ---------------------------------------------------------------------------
   402 // ---------------------------------------------------------------------------
   405 //
   403 //
   406 // ---------------------------------------------------------------------------
   404 // ---------------------------------------------------------------------------
   407 //
   405 //
   408 EXPORT_C TInt CHnMdModel::LoadSuiteL( const TDesC& aGenre, 
   406 EXPORT_C TInt CHnMdModel::LoadSuiteL( const TDesC& aGenre,
   409         CLiwGenericParamList* aSuiteParams )
   407         CLiwGenericParamList* aSuiteParams )
   410     {
   408     {
   411     TInt err( KErrNone );
   409     TInt err( KErrNone );
   412       
   410 
   413 	RXmlEngDocument xmlDoc;
   411 	RXmlEngDocument xmlDoc;
   414 	// Xml model provider takes ownership of xmlDoc.
   412 	// Xml model provider takes ownership of xmlDoc.
   415 	TRAP( err, iXmlModelProvider->GetModelL( aGenre, xmlDoc ) );
   413 	TRAP( err, iXmlModelProvider->GetModelL( aGenre, xmlDoc ) );
   416 
   414 
   417 	TXmlEngElement element;
   415 	TXmlEngElement element;
   421         if ( element.Name() != KContentElementName8 )
   419         if ( element.Name() != KContentElementName8 )
   422             {
   420             {
   423             err = KErrCorrupt;
   421             err = KErrCorrupt;
   424             }
   422             }
   425         }
   423         }
   426     
   424 
   427     if ( !err )
   425     if ( !err )
   428         {
   426         {
   429         CHnMdSuite* newSuite = CHnMdSuite::NewLC( element, &iCmnPtrs );
   427         CHnMdSuite* newSuite = CHnMdSuite::NewLC( element, &iCmnPtrs );
   430         
   428 
   431         if (aSuiteParams)
   429         if (aSuiteParams)
   432             {
   430             {
   433             newSuite->SetSuiteParametersL( *aSuiteParams );
   431             newSuite->SetSuiteParametersL( *aSuiteParams );
   434             }
   432             }
   435         
   433 
   436         TInt pos( 0 );
   434         TInt pos( 0 );
   437         newSuite->GetSuiteParameters().FindFirst( pos, KSuiteName8);
   435         newSuite->GetSuiteParameters().FindFirst( pos, KSuiteName8);
   438         if ( pos == KErrNotFound )
   436         if ( pos == KErrNotFound )
   439         	{
   437         	{
   440         	newSuite->GetSuiteParameters().AppendL( 
   438         	newSuite->GetSuiteParameters().AppendL(
   441         			TLiwGenericParam(KSuiteName8, TLiwVariant( aGenre ) ) );
   439         			TLiwGenericParam(KSuiteName8, TLiwVariant( aGenre ) ) );
   442         	}
   440         	}
   443 
   441 
   444         iCmnPtrs.iContainer->PushNewSuiteModelL( newSuite->SuiteName() );
   442         iCmnPtrs.iContainer->PushNewSuiteModelL( newSuite->SuiteName() );
   445         iCmnPtrs.iContainer->GetLastSuiteModel()->GetItemsOrder()->
   443         iCmnPtrs.iContainer->GetLastSuiteModel()->GetItemsOrder()->
   446             SetSuiteId( iCmnPtrs.iIdGenerator->GetNextId() );
   444             SetSuiteId( iCmnPtrs.iIdGenerator->GetNextId() );
   447         
   445 
   448         CleanupStack::Pop( newSuite );
   446         CleanupStack::Pop( newSuite );
   449         iLoadedSuites.AppendL( newSuite );
   447         iLoadedSuites.AppendL( newSuite );
   450         }
   448         }
   451     else
   449     else
   452     	{
   450     	{
   453     	MMPERF(("CHnMdModel::LoadSuiteL - Error TRAPPED!"));
   451     	MMPERF(("CHnMdModel::LoadSuiteL - Error TRAPPED!"));
   454     	}
   452     	}
   455     
   453 
   456     return err;
   454     return err;
   457     }
   455     }
   458 
   456 
   459 // ---------------------------------------------------------------------------
   457 // ---------------------------------------------------------------------------
   460 //
   458 //
   475 // ---------------------------------------------------------------------------
   473 // ---------------------------------------------------------------------------
   476 //
   474 //
   477 EXPORT_C void CHnMdModel::GetCurrentUriL( TDes& aUri )
   475 EXPORT_C void CHnMdModel::GetCurrentUriL( TDes& aUri )
   478     {
   476     {
   479     iXmlModelProvider->ReloadModelL();
   477     iXmlModelProvider->ReloadModelL();
   480     
   478 
   481     aUri.Append( KPrefMm );
   479     aUri.Append( KPrefMm );
   482     for( TInt i(0); i < iLoadedSuites.Count(); i++ )
   480     for( TInt i(0); i < iLoadedSuites.Count(); i++ )
   483         {
   481         {
   484         aUri.Append( iLoadedSuites[ i ]->SuiteName() );
   482         aUri.Append( iLoadedSuites[ i ]->SuiteName() );
   485         aUri.Append( KSlash );
   483         aUri.Append( KSlash );