diff -r 79859ed3eea9 -r 919f36ff910f widgets/widgetapp/src/cpspublisher.cpp --- a/widgets/widgetapp/src/cpspublisher.cpp Tue Aug 31 16:17:46 2010 +0300 +++ b/widgets/widgetapp/src/cpspublisher.cpp Wed Sep 01 12:28:30 2010 +0100 @@ -18,17 +18,22 @@ #include "cpspublisher.h" -#include -#include -#include -#include +#include +#include +#include +#include #include #include #include -#include +#include // TODO use global definitions! +_LIT8( KWidgetId, "widget_id"); +_LIT8( KBitmapHandle, "bitmap_handle"); +_LIT8( KDelete, "Delete" ); +_LIT( KWidgetUi, "widget_ui"); +_LIT( KScreenshot, "screenshot"); _LIT8( KCPService, "Service.ContentPublishing" ); _LIT8( KCPInterface, "IDataSource" ); @@ -72,6 +77,7 @@ _LIT( KWRTPublisher, "wrt_publisher"); const TInt KSkinGfxInnerRectShrink = 5; +const TUint KDisablePersist = 0x1000; static void DoResetAndDestroy( TAny* aPtr ) { @@ -455,7 +461,7 @@ inparam.AppendL( item ); - iCpsInterface->ExecuteCmdL( KAdd , inparam, outparam); + iCpsInterface->ExecuteCmdL( KAdd , inparam, outparam, KDisablePersist); CleanupStack::PopAndDestroy(); // item @@ -556,6 +562,143 @@ inParam.Reset(); iCpsInterface = msgInterface; } + + + // -------------------------------------------------------------------------- +// CCpsPublisher::PublishScreenshotL +// -------------------------------------------------------------------------- +// +void CCpsPublisher::PublishScreenshotL(const TDesC& aWidget, + TInt aWidgetId, CFbsBitmap* aBmp) + { + StoreBitmapL(aWidgetId, aBmp); + PublishScreenshotToCpsL(aWidget, aWidgetId, aBmp ? aBmp->Handle() : 0); + } + +// -------------------------------------------------------------------------- +// CCpsPublisher::ClearScreenshotL +// -------------------------------------------------------------------------- +// +void CCpsPublisher::ClearScreenshotL(const TDesC& aWidget, + TInt aWidgetId) + { + RemoveScreenshotFromCpsL(aWidget); + RemoveBitmapL(aWidgetId); + } + +// -------------------------------------------------------------------------- +// CCpsPublisher::ClearScreenshotL +// -------------------------------------------------------------------------- +// +void CCpsPublisher::StoreBitmapL(TInt aWidgetId, CFbsBitmap* aBmp) + { + CFbsBitmap** oldbmp = iScreenshots.Find( aWidgetId ); + if ( oldbmp ) + { + delete *oldbmp; + } + if ( iScreenshots.Insert( aWidgetId, aBmp ) != KErrNone ) + { + delete aBmp; + iScreenshots.Remove( aWidgetId ); + } + } + +// -------------------------------------------------------------------------- +// CCpsPublisher::RemoveBitmapL +// -------------------------------------------------------------------------- +// +void CCpsPublisher::RemoveBitmapL(TInt aWidgetId) + { + CFbsBitmap** bmp = iScreenshots.Find( aWidgetId ); + if ( bmp ) + { + delete *bmp; + iScreenshots.Remove( aWidgetId ); + } + } + +// -------------------------------------------------------------------------- +// CCpsPublisher::PublishScreenshotToCpsL +// -------------------------------------------------------------------------- +// +void CCpsPublisher::PublishScreenshotToCpsL(const TDesC& aWidget, + TInt aWidgetId, TInt aBitmap) + { + CLiwGenericParamList& inparam = iServiceHandler->InParamListL(); + CLiwGenericParamList& outparam = iServiceHandler->OutParamListL(); + + TLiwGenericParam cptype( KType, TLiwVariant( KCpData )); + cptype.PushL(); + + inparam.AppendL( cptype ); + + CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC(); + CLiwDefaultMap* map = CLiwDefaultMap::NewLC(); + + // Add bitmap handle to data map + map->InsertL( KWidgetId, TLiwVariant( TInt32(aWidgetId) )); // key - aKey, value - map (stringsMap) + map->InsertL( KBitmapHandle, TLiwVariant( TInt32(aBitmap) )); // key - aKey, value - map (stringsMap) + + // Create content data map + cpdatamap->InsertL( KPublisherId, TLiwVariant( KWidgetUi )); + cpdatamap->InsertL( KContentType, TLiwVariant( KScreenshot )); + cpdatamap->InsertL( KContentId, TLiwVariant( aWidget )); + cpdatamap->InsertL( KDataMap, TLiwVariant(map) ); + + TLiwGenericParam item( KItem, TLiwVariant( cpdatamap )); + item.PushL(); + + inparam.AppendL( item ); + + iCpsInterface->ExecuteCmdL( KAdd , inparam, outparam); + + CleanupStack::PopAndDestroy( &item ); + CleanupStack::PopAndDestroy( map ); + CleanupStack::PopAndDestroy( cpdatamap ); + CleanupStack::PopAndDestroy( &cptype ); + + outparam.Reset(); + inparam.Reset(); + } + + +// -------------------------------------------------------------------------- +// CCpsPublisher::PublishScreenshotToCpsL +// -------------------------------------------------------------------------- +// +void CCpsPublisher::RemoveScreenshotFromCpsL(const TDesC& aWidget) + { + CLiwGenericParamList& inparam = iServiceHandler->InParamListL(); + CLiwGenericParamList& outparam = iServiceHandler->OutParamListL(); + + TLiwGenericParam cptype( KType, TLiwVariant( KCpData )); + cptype.PushL(); + + inparam.AppendL( cptype ); + + CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC(); + + // Create content data map + cpdatamap->InsertL( KPublisherId, TLiwVariant( KWidgetUi )); + cpdatamap->InsertL( KContentType, TLiwVariant( KScreenshot )); + cpdatamap->InsertL( KContentId, TLiwVariant( aWidget )); + + TLiwGenericParam item( KItem, TLiwVariant( cpdatamap )); + item.PushL(); + + inparam.AppendL( item ); + + iCpsInterface->ExecuteCmdL( KDelete , inparam, outparam); + + CleanupStack::PopAndDestroy( &item ); + CleanupStack::PopAndDestroy( cpdatamap ); + CleanupStack::PopAndDestroy( &cptype ); + + outparam.Reset(); + inparam.Reset(); + } + // END OF FILE