--- a/idlehomescreen/examples/carouselwidgetexample/publisher/src/carouselplugin.cpp Wed Sep 15 12:00:00 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,502 +0,0 @@
-/*
-* Copyright (c) 2009 - 2010 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: MCS plugin publisher
-*
-*/
-
-// System includes
-#include <ecom/ecom.h>
-#include <ecom/implementationproxy.h>
-#include <gulicon.h>
-#include <mcsmenuitem.h>
-
-// User includes
-#include <aicontentobserver.h>
-#include <aistrcnv.h>
-#include <aiutility.h>
-#include <aipluginsettings.h>
-#include "carouselpluginuids.hrh"
-#include "carouselplugin.h"
-#include "carouselplugindata.h"
-#include "carouselpluginengine.h"
-
-// Constants
-const TUint KPluginNameSeprator = '/';
-
-const TInt KImplUidMCSPlugin = AI_UID_ECOM_IMPLEMENTATION_CONTENTPUBLISHER_CAROUSELPLUGIN;
-
-_LIT( KEventNameLaunchByIndex, "LaunchByIndex" );
-_LIT( KEventNameShowSettings, "ShowSettings" );
-_LIT( KContentItemTypeText, "text" );
-_LIT( KContentItemTypeImage, "image" );
-_LIT( KContentItemTypeData, "data" );
-
-const TImplementationProxy KImplementationTable[] =
- {
- IMPLEMENTATION_PROXY_ENTRY( KImplUidMCSPlugin, CCarouselPlugin::NewL )
- };
-
-class CPublishItem : public CBase
- {
-public:
- ~CPublishItem();
- CPublishItem();
-
- CGulIcon* icon;
- HBufC* text;
- TBool last;
- };
-
-CPublishItem::CPublishItem()
- {
-
- }
-
-CPublishItem::~CPublishItem()
- {
- delete text;
- }
-
-// ======== LOCAL FUNCTIONS ========
-
-// ======== MEMBER FUNCTIONS ========
-// ----------------------------------------------------------------------------
-// CMCSPlugin::NewL
-//
-// ----------------------------------------------------------------------------
-//
-CCarouselPlugin* CCarouselPlugin::NewL()
- {
- CCarouselPlugin* self = new ( ELeave ) CCarouselPlugin;
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
-
- return self;
- }
-
-// ----------------------------------------------------------------------------
-// CMCSPlugin::CMCSPlugin
-//
-// ----------------------------------------------------------------------------
-//
-CCarouselPlugin::CCarouselPlugin()
- {
- }
-
-// ----------------------------------------------------------------------------
-// CMCSPlugin::ConstructL
-//
-// ----------------------------------------------------------------------------
-//
-void CCarouselPlugin::ConstructL()
- {
- }
-
-// ----------------------------------------------------------------------------
-// Destructor
-// Deletes all data created to heap
-// ----------------------------------------------------------------------------
-//
-CCarouselPlugin::~CCarouselPlugin()
- {
- Release( iContent );
-
- delete iEngine;
- iObservers.Close();
-
- DeleteContentModel();
- }
-
-// ----------------------------------------------------------------------------
-// CMCSPlugin::PublishL
-// Publishes the all the items
-// ----------------------------------------------------------------------------
-//
-void CCarouselPlugin::PublishL()
- {
- TInt err( KErrNone );
- TInt observers( iObservers.Count() );
- TInt transactionId( reinterpret_cast<TInt>( this ) );
- TInt menuItems ( iEngine->MenuItemCount() );
-
- for ( TInt i = 0; i < observers; i++ )
- {
- MAiContentObserver* observer( iObservers[ i ] );
- err = observer->StartTransaction( transactionId );
-
- if ( err == KErrNotSupported )
- {
- return;
- }
-
- // Publish content to all items
- for ( TInt j = 0; j < menuItems; j++ )
- {
- // Index has to start from 1 ( j + 1 )
- PublishLItemL( *observer, iEngine->MenuDataL( j ), ( j + 1 ) );
- }// shortcut count
-
- if ( err == KErrNone )
- {
- err = observer->Commit( transactionId );
-
- if ( err == KErrNotSupported )
- {
- return;
- }
- }
- }//observers
-
- // Set all items not dirty.
- for ( TInt j = 0; j < menuItems; j++ )
- {
- iEngine->MenuDataL( j ).SetDirty( EFalse );
- }
- }
-
-// ----------------------------------------------------------------------------
-// CMCSPlugin::PublishLItemL
-// Publishes one item to given index
-// ----------------------------------------------------------------------------
-//
-void CCarouselPlugin::PublishLItemL( MAiContentObserver& aObserver,
- CCarouselData& aData, TInt aIndex )
- {
- if( !aData.IsDirty() )
- {
- return;
- }
-
- CMenuItem* item = iEngine->FetchMenuItemL( aData );
- CleanupStack::PushL( item );
-
- if ( iContentModel[0].type == KAiContentTypeData )
- {
- if(TPtrC16( ( const TText16* ) iContentModel[ 0 ].cid ) == _L("widget") )
- {
- CGulIcon* icon( iEngine->ItemIconL( item, _L("icon")));
- icon->SetBitmapsOwnedExternally( ETrue );
- aObserver.Publish( *this, 0, TPckgC<TAny*>( icon ), aIndex - 1 );
- }
- }
- CleanupStack::PopAndDestroy( item );
- }
-
-// ----------------------------------------------------------------------------
-// PublishEditorItemsL
-//
-// ----------------------------------------------------------------------------
-//
-void CCarouselPlugin::PublishEditorItemsL()
- {/*
- RArray<TMenuItem> items = iEngine->MenuItemsL();
- CleanupClosePushL( items );
-
- TInt count( items.Count());
- for( TInt i = 0; i < count; i++ )
- {
- CMenuItem* item( iEngine->FetchMenuItemL( items[i]));
- CleanupStack::PushL( item );
- CGulIcon* icon( iEngine->ItemIconL( *item, _L("icon")));
- TPtrC name( iEngine->ItemTextL( *item, _L("long_name") ));
- CPublishItem* pItem = new CPublishItem;
- pItem->icon = icon;
- pItem->text = name.AllocL();
- if( i < count - 1 )
- {
- pItem->last = EFalse;
- }
- else
- {
- pItem->last = ETrue;
- }
- iObservers[0]->Publish( *this, 0, TPckgC<TAny*>( pItem), i );
- delete pItem;
- CleanupStack::PopAndDestroy( item );
- }
- CleanupStack::PopAndDestroy( &items );
- */
- }
-
-// ----------------------------------------------------------------------------
-// CMCSPlugin::Start
-//
-// ----------------------------------------------------------------------------
-//
-void CCarouselPlugin::Start( TStartReason /*aReason*/ )
- {
-
- }
-
-// ----------------------------------------------------------------------------
-// CMCSPlugin::Stop
-//
-// ----------------------------------------------------------------------------
-//
-void CCarouselPlugin::Stop( TStopReason /*aReason*/ )
- {
-
- }
-
-// ----------------------------------------------------------------------------
-// CMCSPlugin::Resume
-//
-// ----------------------------------------------------------------------------
-//
-void CCarouselPlugin::Resume( TResumeReason aReason )
- {
- if ( aReason == EForeground )
- {
- iEngine->SetBackupRestore( EFalse );
-
- if ( PublishRequired() )
- {
- TRAP_IGNORE( PublishL() );
- }
- }
- }
-
-// ----------------------------------------------------------------------------
-// CMCSPlugin::Suspend
-//
-// ----------------------------------------------------------------------------
-//
-void CCarouselPlugin::Suspend( TSuspendReason aReason )
- {
- if ( aReason == EGeneralThemeChange )
- {
- TInt dataCount( iEngine->MenuItemCount() );
-
- for ( TInt i = 0; i < dataCount; i++ )
- {
- TRAP_IGNORE( iEngine->MenuDataL( i ).SetDirty( ETrue ) );
- }
- }
- else if ( aReason == EBackupRestore )
- {
- // Prevent item launching during backup / restore
- iEngine->SetBackupRestore( ETrue );
- }
- }
-
-// ----------------------------------------------------------------------------
-// CMCSPlugin::SubscribeL
-//
-// ----------------------------------------------------------------------------
-//
-void CCarouselPlugin::SubscribeL( MAiContentObserver& aObserver )
- {
- iObservers.AppendL( &aObserver );
- }
-
-// ----------------------------------------------------------------------------
-// CMCSPlugin::ConfigureL
-//
-// ----------------------------------------------------------------------------
-//
-void CCarouselPlugin::ConfigureL( RAiSettingsItemArray& aSettings )
- {
- iEngine = CCarouselPluginEngine::NewL( *this, PublisherInfo().Namespace() );
-
- TLinearOrder<MAiPluginSettings> sortMethod( CCarouselPlugin::CompareItems );
- RAiSettingsItemArray contentItemsArr;
-
- TInt count( aSettings.Count() );
-
- for ( TInt i = 0; i < count; i++ )
- {
- MAiPluginSettings* setting( aSettings[ i ] );
-
- if( setting->AiPluginItemType() == EAiPluginContentItem )
- {
- MAiPluginContentItem& contItem( setting->AiPluginContentItem() );
- TPtrC name( contItem.Name() );
- TPtrC type( contItem.Type() );
-
- contentItemsArr.InsertInOrder( setting, sortMethod );
- }
- }
-
- iDataCount = contentItemsArr.Count();
-
- if ( iDataCount > 0 )
- {
- // Create the dynamic content Model
- DeleteContentModel();
-
- iContentModel = new ( ELeave ) TAiContentItem[ iDataCount ];
-
- for ( TInt i = 0; i < iDataCount; i++ )
- {
- iContentModel[i].id = i;
-
- MAiPluginContentItem& contentItem(
- contentItemsArr[ i ]->AiPluginContentItem() );
-
- if( contentItem.Type() == KContentItemTypeText )
- {
- // text
- iContentModel[i].type = KAiContentTypeText;
- }
- if( contentItem.Type() == KContentItemTypeImage )
- {
- // image
- iContentModel[i].type = KAiContentTypeBitmap;
- }
- else if(contentItem.Type() == KContentItemTypeData )
- {
- // data
- iContentModel[i].type = KAiContentTypeData;
- }
-
- TInt pos( contentItem.Name().Locate( KPluginNameSeprator ) );
-
- HBufC* contentId = HBufC::NewL( contentItem.Name().Length() );
- CleanupStack::PushL( contentId );
-
- TPtr ptr( contentId->Des() );
- ptr = contentItem.Name().Mid( pos + 1 );
-
- TInt sizeOfContentId( ptr.Size() + sizeof( wchar_t ) );
-
- iContentModel[i].cid =
- static_cast<const wchar_t*>( User::AllocL( sizeOfContentId ) );
-
- Mem::Copy( ( TAny* )iContentModel[i].cid,
- ptr.PtrZ(), sizeOfContentId );
-
- CleanupStack::PopAndDestroy( contentId );
- }
-
- iContent = AiUtility::CreateContentItemArrayIteratorL(
- iContentModel, iDataCount );
- }
-
- contentItemsArr.Reset();
- // We own the array so destroy it
- aSettings.ResetAndDestroy();
- }
-
-// ----------------------------------------------------------------------------
-// CMCSPlugin::GetProperty
-//
-// ----------------------------------------------------------------------------
-//
-TAny* CCarouselPlugin::GetProperty( TProperty aProperty )
- {
- if( aProperty == EPublisherContent )
- {
- return static_cast< MAiContentItemIterator* >( iContent );
- }
-
- return NULL;
- }
-
-// ----------------------------------------------------------------------------
-// CMCSPlugin::HandleEvent
-//
-// ----------------------------------------------------------------------------
-//
-void CCarouselPlugin::HandleEvent( const TDesC& aEventName, const TDesC& aParam )
- {
- if( aEventName == KEventNameLaunchByIndex )
- {
- TInt32 index;
- AiUtility::ParseInt( index, aParam );
-
- TRAP_IGNORE( iEngine->LaunchItemL( index - 1 ) );
- }
- else if( aEventName == KEventNameShowSettings )
- {
- TRAP_IGNORE( iEngine->ShowSettingsL() );
- }
- else if( aEventName == _L("ShowEditor"))
- {
- TRAP_IGNORE( PublishEditorItemsL() );
- }
- }
-
-// ----------------------------------------------------------------------------
-// CMCSPlugin::CompareItems
-//
-// ----------------------------------------------------------------------------
-//
-TInt CCarouselPlugin::CompareItems( const MAiPluginSettings& aFirst,
- const MAiPluginSettings& aSecond )
- {
- MAiPluginSettings& first = const_cast<MAiPluginSettings&>(aFirst);
- MAiPluginSettings& second = const_cast<MAiPluginSettings&>(aSecond);
- return first.AiPluginContentItem().Name().CompareC(second.AiPluginContentItem().Name());
- }
-
-// ----------------------------------------------------------------------------
-// CMCSPlugin::DeleteContentModel
-//
-// ----------------------------------------------------------------------------
-//
-void CCarouselPlugin::DeleteContentModel()
- {
- if( iContentModel )
- {
- for ( TInt i = 0; i < iDataCount; i++ )
- {
- if( iContentModel[i].cid )
- {
- TAny* cell = static_cast<TAny*>( const_cast<wchar_t*>( iContentModel[i].cid ) );
- User::Free( cell ); // Originally allocated with User::Alloc, so delete
- // with correlating method.
- iContentModel[i].cid = NULL;
- }
- }
-
- delete iContentModel;
- iContentModel = NULL;
- }
- }
-
-// ----------------------------------------------------------------------------
-// CMCSPlugin::PublishRequired
-//
-// ----------------------------------------------------------------------------
-//
-TBool CCarouselPlugin::PublishRequired() const
- {
- TInt count( iEngine->MenuItemCount() );
-
- TBool retval( EFalse );
-
- for ( TInt i = 0; !retval && i < count; i++ )
- {
- TRAP_IGNORE( retval = iEngine->MenuDataL( i ).IsDirty() );
- }
-
-
- return retval;
- }
-
-// ======== GLOBAL FUNCTIONS ========
-// ----------------------------------------------------------------------------
-// Constructs and returns an application object.
-// ----------------------------------------------------------------------------
-//
-EXPORT_C const TImplementationProxy* ImplementationGroupProxy(
- TInt& aTableCount )
- {
- aTableCount = sizeof( KImplementationTable ) /
- sizeof( TImplementationProxy );
- return KImplementationTable;
- }
-
-// End of file