homescreensrv_plat/hs_widget_publisher_api/src/hswidgetpublisherimpl.cpp
branchRCL_3
changeset 11 bd874ee5e5e2
parent 8 d0529222e3f0
child 19 edd621764147
--- a/homescreensrv_plat/hs_widget_publisher_api/src/hswidgetpublisherimpl.cpp	Fri Feb 19 23:07:29 2010 +0200
+++ b/homescreensrv_plat/hs_widget_publisher_api/src/hswidgetpublisherimpl.cpp	Fri Mar 12 15:43:54 2010 +0200
@@ -198,7 +198,7 @@
 		    {
 		    // remove widget data when widget removed from screen
 		    CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC();
-		    InsertWidgetDataIdentifiersL( aWidget, cpdatamap );
+		    InsertWidgetDataIdentifiersL( aWidget, cpdatamap, KAll );
 		    // removal may fail if the client has already removed the data
 		    TRAP_IGNORE( RemoveFromCpsL( cpdatamap, KCpData ) );
 		    mWidgetContentIds.erase( aWidget.getIdentifier() );
@@ -411,45 +411,55 @@
 // ---------------------------------------------------------------------------
 //
 void HsWidgetPublisherImpl::PublishWidgetDataL( HsWidget& aWidget )
-	{
-	CLiwGenericParamList* inParam = &(mServiceHandler->InParamListL());
-	CLiwGenericParamList* outParam = &(mServiceHandler->OutParamListL());
-	
-	TLiwGenericParam type(KType, TLiwVariant(KCpData));
-	inParam->AppendL(type);
-	
-	CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC();
-	InsertWidgetDataIdentifiersL( aWidget, cpdatamap );
-   
-	CLiwDefaultMap* datamap = CLiwDefaultMap::NewLC();
-	InsertWidgetItemsL( aWidget, datamap );
-	cpdatamap->InsertL( KDataMap, TLiwVariant( datamap ) );
-	InsertWidgetACLL( cpdatamap );
-	
-	int count = aWidget.itemsCount();
-	if( count > 0 )
-		{
-		CLiwDefaultMap* triggermap = CLiwDefaultMap::NewLC();
-		InsertItemsTriggersL( aWidget, triggermap );
-		cpdatamap->InsertL( KActionMap, TLiwVariant( triggermap ) );
-		CleanupStack::PopAndDestroy( triggermap );
-		}
+    {
+    CLiwGenericParamList* inParam = &(mServiceHandler->InParamListL());
+    CLiwGenericParamList* outParam = &(mServiceHandler->OutParamListL());
+    TLiwGenericParam type(KType, TLiwVariant(KCpData));
+    
+    int count = aWidget.itemsCount();
+    for( int i = 0; i < count; i++ )
+        {
+        inParam->AppendL(type);
+        CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC();
 
-	TLiwGenericParam item( KItem, TLiwVariant( cpdatamap ));	    
-	inParam->AppendL( item );
-	mServiceInterface->ExecuteCmdL( KAdd,
-			*inParam, *outParam);
-	TInt ret= ObtainErrorCode( *outParam );
+        HsWidgetItem* const widgetItem = aWidget.getWidgetItem( i );
+        
+        // insert widget data identifiers
+        HBufC* itemName = StdStringToUnicodeLC( widgetItem->getItemName());
+        InsertWidgetDataIdentifiersL( aWidget, cpdatamap, *itemName );
+        CleanupStack::PopAndDestroy( itemName );
+        
+        // insert widget item
+        CLiwDefaultMap* datamap = CLiwDefaultMap::NewLC();
+        InsertWidgetItemL( *widgetItem, datamap );
+        cpdatamap->InsertL( KDataMap, TLiwVariant( datamap ) );
+        
+        // insert widget access control list
+        InsertWidgetACLL( cpdatamap );
+        
+        // insert item triggers
+        CLiwDefaultMap* triggermap = CLiwDefaultMap::NewLC();
+        InsertItemTriggerL( *widgetItem, triggermap );
+        cpdatamap->InsertL( KActionMap, TLiwVariant( triggermap ) );
+        CleanupStack::PopAndDestroy( triggermap );
 
-	CleanupStack::PopAndDestroy( datamap );
-	CleanupStack::PopAndDestroy( cpdatamap );
-
-	item.Reset();
-	type.Reset();	
-	outParam->Reset();
-	inParam->Reset();
-	User::LeaveIfError( ret );
-	}
+        // add to CPS
+        TLiwGenericParam item( KItem, TLiwVariant( cpdatamap ));
+        inParam->AppendL( item );
+        mServiceInterface->ExecuteCmdL( KAdd,
+                *inParam, *outParam);
+        TInt ret= ObtainErrorCode( *outParam );
+        
+        CleanupStack::PopAndDestroy( datamap );
+        CleanupStack::PopAndDestroy( cpdatamap );
+        
+        item.Reset();
+        outParam->Reset();
+        inParam->Reset();
+        User::LeaveIfError( ret );
+        }
+    type.Reset();
+    }
 
 // ---------------------------------------------------------------------------
 // 
@@ -562,7 +572,7 @@
     CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC();
     
     TRAPD( err,
-            InsertWidgetDataIdentifiersL( aWidget, cpdatamap );
+            InsertWidgetDataIdentifiersL( aWidget, cpdatamap, KAll );
             RemoveFromCpsL( cpdatamap, KCpData ) );
     if ( err != KErrNotFound )
         {
@@ -773,7 +783,7 @@
 // ---------------------------------------------------------------------------
 //
 void HsWidgetPublisherImpl::InsertWidgetDataIdentifiersL( HsWidget& aWidget,
-	CLiwDefaultMap* aDataMap )
+	CLiwDefaultMap* aDataMap, const TDesC& aContentType )
     {
     WidgetContentIdMapType::const_iterator contentIdIter =
             mWidgetContentIds.find( aWidget.getIdentifier() );
@@ -787,7 +797,7 @@
     HBufC* publisherName = StdStringToUnicodeLC( GetPublisherNameL( aWidget ) );
     
     aDataMap->InsertL( KPublisherId, TLiwVariant( *publisherName ) );
-    aDataMap->InsertL( KContentType, TLiwVariant( KAll ) );
+    aDataMap->InsertL( KContentType, TLiwVariant( aContentType ) );
     aDataMap->InsertL( KContentId, TLiwVariant( contentId ) );
     
     CleanupStack::PopAndDestroy( publisherName );
@@ -835,31 +845,25 @@
 // 
 // ---------------------------------------------------------------------------
 //
-void HsWidgetPublisherImpl::InsertWidgetItemsL ( HsWidget& aWidget,
+void HsWidgetPublisherImpl::InsertWidgetItemL ( HsWidgetItem& aWidgetItem,
 	CLiwDefaultMap* aDataMap )
 	{
-	int count = aWidget.itemsCount();
-	for (int index = 0; index < count; index++)
-		{
-		HsWidgetItem* const item = aWidget.getWidgetItem( index );
-		
-		TPtrC8 itemName = ((TUint8*)item->getItemName().c_str());
-		if( item->isStringValue() )
-			{
-			TPtrC8 itemValue = ((TUint8*)item->getItemValue().c_str());
-		    HBufC* value = HBufC::NewLC( KUnicodeSize * itemValue.Length() );
-		    TPtr dest( value->Des() );
-		    CnvUtfConverter::ConvertToUnicodeFromUtf8( dest, itemValue );
-		    
-		    aDataMap->InsertL( itemName, TLiwVariant(*value ));
-			CleanupStack::PopAndDestroy(value);
-			}
-		else
-			{
-			int itemValue = item->getItemValueInt();
-			aDataMap->InsertL( itemName, TLiwVariant( TInt32( itemValue ) ));
-			}
-		}
+    TPtrC8 itemName = ((TUint8*)aWidgetItem.getItemName().c_str());
+    if( aWidgetItem.isStringValue() )
+        {
+        TPtrC8 itemValue = ((TUint8*)aWidgetItem.getItemValue().c_str());
+        HBufC* value = HBufC::NewLC( KUnicodeSize * itemValue.Length() );
+        TPtr dest( value->Des() );
+        CnvUtfConverter::ConvertToUnicodeFromUtf8( dest, itemValue );
+        
+        aDataMap->InsertL( itemName, TLiwVariant(*value ));
+        CleanupStack::PopAndDestroy(value);
+        }
+    else
+        {
+        int itemValue = aWidgetItem.getItemValueInt();
+        aDataMap->InsertL( itemName, TLiwVariant( TInt32( itemValue ) ));
+        }
 	}
 
 // ---------------------------------------------------------------------------
@@ -937,10 +941,9 @@
 // 
 // ---------------------------------------------------------------------------
 //
-void HsWidgetPublisherImpl::InsertItemsTriggersL( HsWidget& aWidget,
+void HsWidgetPublisherImpl::InsertItemTriggerL( HsWidgetItem& aWidgetItem,
 	CLiwDefaultMap* aTriggerMap )
 	{
-	int count = aWidget.itemsCount();
 	CLiwDefaultMap* activateAction = CLiwDefaultMap::NewLC();
 	activateAction->InsertL( KPluginId, TLiwVariant( KCASpaAppLauncherPlugin ) );
 	
@@ -951,13 +954,10 @@
 	activate->InsertL( KApaCommand, TLiwVariant( KApaCommandBackground ) );
 	
 	activateAction->InsertL( KData, TLiwVariant( activate ) );
-	
-	for (int index = 0; index < count; index++)
-		{
-		HsWidgetItem* const item = aWidget.getWidgetItem( index );
-		TPtrC8 itemName = ((TUint8*)item->getItemName().c_str());
-		aTriggerMap->InsertL( itemName, TLiwVariant( activateAction ));
-		}
+
+    TPtrC8 itemName = ((TUint8*)aWidgetItem.getItemName().c_str());
+    aTriggerMap->InsertL( itemName, TLiwVariant( activateAction ));
+
 	CleanupStack::PopAndDestroy( activate );
 	CleanupStack::PopAndDestroy( activateAction );
 	}