idlehomescreen/examples/carouselwidgetexample/publisher/src/carouselpluginengine.cpp
branchRCL_3
changeset 102 ba63c83f4716
parent 93 b01126ce0bec
child 103 966d119a7e67
--- a/idlehomescreen/examples/carouselwidgetexample/publisher/src/carouselpluginengine.cpp	Wed Sep 15 12:00:00 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,841 +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:  The engine class of MCS plugin. 
-*
-*/
-
-// System includes
-#include <gulicon.h>
-#include <gslauncher.h>
-#include <mcsmenufilter.h>
-#include <mcsmenuoperation.h>
-#include <mcsmenuiconutility.h>
-#include <bautils.h>
-#include <StringLoader.h>
-#include <aknnotedialog.h>
-#include <mcspluginres.rsg>
-#include <apgcli.h> 
-#include <apacmdln.h>
-#include <gfxtranseffect/gfxtranseffect.h>      
-#include <akntranseffect.h>
-#include <schemehandler.h>
-#include <viewcli.h>                // For CVwsSessionWrapper
-#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
-#include <viewclipartner.h>
-#endif
-#include <aisystemuids.hrh>
-
-// User includes
-#include "carouselpluginengine.h"
-#include "carouselplugin.h"
-#include "carouselplugindata.h"
-#include "carouselpluginuids.hrh"
-
-// Constants
-_LIT( KMyMenuData, "matrixmenudata" );
-_LIT( KSkin,         "skin" );
-_LIT( KMif,          "mif" );
-_LIT( KResourceDrive, "Z:" );
-_LIT( KResourceFile, "mcspluginres.rsc" );
-_LIT( KResPath, "\\resource\\" );
-_LIT( KMMApplication, "mm://" );
-_LIT( KHideExit2, "&exit=hide" );
-_LIT( KSetFocusString, "!setfocus?applicationgroup_name=" );
-_LIT( KApplicationGroupName, "applicationgroup_name" );
-_LIT( KIcon, "icon" );
-_LIT( KMenuAttrUndefUid, "0x99999991" );
-_LIT( KMenuIconFile, "aimcsplugin.mif" );
-_LIT( KMenuBookmarkIconId, "16386" );
-_LIT( KMenuBookmarkMaskId, "16387" );
-_LIT( KMenuMailboxIconId, "16388" );
-_LIT( KMenuMailboxMaskId, "16389" );
-_LIT( KMenuTypeMailbox, "menu:mailbox" );
-_LIT( KPrefix, "0x" );
-
-const TUid KHomescreenUid = { AI_UID3_AIFW_COMMON };
-const TUid KMMUid = { 0x101F4CD2 };
-const TUid KMCSCmailUidValue = { 0x2001E277 };
-const TUid KMCSCmailMailboxViewIdValue = { 0x2 };
-const TUid KBrowserUid = { 0x10008D39 };
-
-// ======== LOCAL FUNCTIONS ========
-// ----------------------------------------------------------------------------
-// NextIdToken
-// ----------------------------------------------------------------------------
-//
-static TPtrC NextIdToken( TLex& aLexer )
-   {
-   aLexer.SkipSpace();
-   aLexer.Mark();
-  
-   while( !aLexer.Eos() && !aLexer.Peek().IsSpace() && aLexer.Peek() != ')' )
-       {
-       aLexer.Inc();
-       }
-   
-   return aLexer.MarkedToken();
-   }
-
-// ----------------------------------------------------------------------------
-// Shows note dailog, with the given resource.
-// ----------------------------------------------------------------------------
-//
-static void ShowNoteDlgL( TInt aResource )
-    {
-    HBufC* temp = StringLoader::LoadLC( aResource );
-    
-    CAknNoteDialog* dialog = new (ELeave) CAknNoteDialog(
-    CAknNoteDialog::EConfirmationTone,
-    CAknNoteDialog::ENoTimeout );
-    CleanupStack::PushL( dialog );
-    dialog->SetTextL( temp->Des() );
-    dialog->ExecuteDlgLD( R_MCS_DISABLE_OPEN_ITEM_DLG );
-    CleanupStack::Pop( dialog );
-    CleanupStack::PopAndDestroy( temp );
-    }
-
-// ----------------------------------------------------------------------------
-// Parses uid in Hexadecimal format from the given string.
-// ----------------------------------------------------------------------------
-//
-TUid ParseHexUidFromString(const TDesC& aUidString )
-    {
-    TUid uid( KNullUid ); 
-    const TInt pos( aUidString.FindF( KPrefix ) );
-    
-    if ( pos != KErrNotFound )
-        {
-        TLex lex( aUidString.Mid( pos + KPrefix().Length() ) );
-        
-        // Hex parsing needs unsigned int
-        TUint32 value( 0 );
-        const TInt parseResult( lex.Val( value, EHex ) );
-        
-        if ( parseResult == KErrNone )
-            {
-            TInt32 value32( value );
-            uid.iUid = value32;   
-            }
-        }
-    return uid;
-    }
-
-// ----------------------------------------------------------------------------
-// Start transition effect. User has launched the application with the given uid.
-// ----------------------------------------------------------------------------
-//
-void StartEffect( TUid aUid )
-    {
-    //start a full screen effect
-    GfxTransEffect::BeginFullScreen( 
-        AknTransEffect::EApplicationStart,
-        TRect(), 
-        AknTransEffect::EParameterType, 
-        AknTransEffect::GfxTransParam( aUid,
-        AknTransEffect::TParameter::EActivateExplicitContinue ));
-    }
-
-// ============================ MEMBER FUNCTIONS ===============================
-// ----------------------------------------------------------------------------
-// CMCSPluginEngine::CMCSPluginEngine
-//
-// ----------------------------------------------------------------------------
-//
-CCarouselPluginEngine::CCarouselPluginEngine( CCarouselPlugin& aPlugin, 
-    const TDesC8& aInstanceUid ) 
-    : iPlugin( aPlugin ), iInstanceUid( aInstanceUid )    
-    {
-    }
-    
-// ----------------------------------------------------------------------------
-// CMCSPluginEngine::NewL
-// 
-// ----------------------------------------------------------------------------
-//
-CCarouselPluginEngine* CCarouselPluginEngine::NewL( CCarouselPlugin& aPlugin, 
-    const TDesC8& aInstanceUid )
-    {
-    CCarouselPluginEngine* self = 
-        new( ELeave ) CCarouselPluginEngine( aPlugin, aInstanceUid );
-    
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-// ----------------------------------------------------------------------------
-// CMCSPluginEngine::ConstructL
-//
-// ----------------------------------------------------------------------------
-//
-void CCarouselPluginEngine::ConstructL()
-    {
-    TFullName resourceFile( KResourceDrive );
-    resourceFile.Append( KResPath );
-    resourceFile.Append( KResourceFile );
-    BaflUtils::NearestLanguageFile(
-        CCoeEnv::Static()->FsSession(),
-        resourceFile );
-    iResourceOffset =
-        CCoeEnv::Static()->AddResourceFileL( resourceFile );
-    InitL();
-    StartObservingL();
-    
-    // Get "Undefined" item
-    CMenuFilter* filter = CMenuFilter::NewL();
-    CleanupStack::PushL( filter );
-    filter->HaveAttributeL( KMenuAttrUid, KMenuAttrUndefUid );
-    iUndefinedItemHeader = FindMenuItemL( *filter );
-    CleanupStack::PopAndDestroy( filter );
-    iUndefinedItem = CMenuItem::OpenL( iMenu, iUndefinedItemHeader );    
-    }
-
-// ----------------------------------------------------------------------------
-// CMCSPluginEngine::~CMCSPluginEngine
-//
-// ----------------------------------------------------------------------------
-//
-CCarouselPluginEngine::~CCarouselPluginEngine()
-    {
-    StopObserving();
-
-    delete iPluginData;
-
-    // Notifier close has to be before iMenu close
-    iNotifier.Close();
-    iMenu.Close();
-    delete iWatcher;
-    delete iNotifyWatcher;
-
-    CCoeEnv::Static()->DeleteResourceFile( iResourceOffset );
-
-    delete iUndefinedItem;
-    }
-
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::InitL
-//
-// ---------------------------------------------------------------------------
-//
-void CCarouselPluginEngine::InitL()
-    {
-    iMenu.OpenL( KMyMenuData );
-    iPluginData = CCarouselPluginData::NewL( *this, iInstanceUid );
-    iWatcher = CCarouselPluginWatcher::NewL( CCarouselPluginWatcher::EOperation );
-    
-    TInt err( iNotifier.Open( iMenu ) ); 
-    
-    if ( err == KErrNone )
-        {
-        iNotifyWatcher = CCarouselPluginWatcher::NewL( CCarouselPluginWatcher::ENotify );
-        
-        iNotifier.Notify( 0,
-            RMenuNotifier::EItemsAddedRemoved,
-            iNotifyWatcher->iStatus );
-        iNotifyWatcher->WatchNotify( this );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::StartObservingL
-//
-// ---------------------------------------------------------------------------
-//
-void CCarouselPluginEngine::StartObservingL()
-    {
-    // registering to mailbox db. changes observing
-    iMsvSession = CMsvSession::OpenAsObserverL( *this );
-    }
-
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::StopObserving
-//
-// ---------------------------------------------------------------------------
-//
-void CCarouselPluginEngine::StopObserving()
-    {       
-    delete iMsvSession;
-    iMsvSession = NULL;    
-    }
-
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::MenuDataL
-//
-// ---------------------------------------------------------------------------
-//
-CCarouselData& CCarouselPluginEngine::MenuDataL( const TInt& aIndex )
-    {
-    return iPluginData->DataItemL( aIndex );
-    }
-
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::MenuItemCount
-//
-// ---------------------------------------------------------------------------
-//
-TInt CCarouselPluginEngine::MenuItemCount()
-    {
-    return iPluginData->DataCount();
-    }
-
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::FindMenuItemL
-// Returns the menu item header, which matches the given filter.
-// ---------------------------------------------------------------------------
-//
-TMenuItem CCarouselPluginEngine::FindMenuItemL( CMenuFilter& aFilter )
-    {    
-    TMenuItem item;
-    const TInt root( iMenu.RootFolderL() );
-    
-    RArray<TMenuItem> items;
-    CleanupClosePushL( items );
-    
-    iMenu.GetItemsL( items, root, &aFilter, ETrue );
-    
-    if ( items.Count() > 0 )
-        {
-        item = items[0];
-        }
-
-    CleanupStack::PopAndDestroy( &items );
-    
-    return item;
-    }
-
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::FetchMenuItemL
-// Returns the actual menu item for the given header.
-// ---------------------------------------------------------------------------
-//
-CMenuItem* CCarouselPluginEngine::FetchMenuItemL( CCarouselData& aData )
-    {
-    CMenuItem* item = NULL;
-    
-    TRAP_IGNORE( item = CMenuItem::OpenL( iMenu, aData.MenuItem().Id() ) );
-    
-    if( item )
-        {
-        return item; 
-        }
-    
-    if( aData.MenuItem().Type() == KMenuTypeUrl )
-        {
-        item = CreateBkmItemL( aData );
-        }
-    else if( aData.MenuItem().Type() == KMenuTypeMailbox )
-        {
-        item = CreateMailboxItemL( aData);
-        }
-    
-    return item;
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-CMenuItem* CCarouselPluginEngine::CreateBkmItemL( CCarouselData& aData )
-    {
-    CMenuItem* item( NULL );
-    if( aData.MenuItem().Id() != KErrNotFound )
-        {        
-        item = CMenuItem::CreateL( iMenu, KMenuTypeUrl, 0, 0 );
-        CleanupStack::PushL( item );
-        item->SetAttributeL( KMenuAttrLongName, aData.Name() );
-        item->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
-        item->SetAttributeL( KMenuAttrIconId, KMenuBookmarkIconId );
-        item->SetAttributeL( KMenuAttrMaskId, KMenuBookmarkMaskId );
-        CleanupStack::Pop( item );
-        }
-    return item;
-    }
-    
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-CMenuItem* CCarouselPluginEngine::CreateMailboxItemL( CCarouselData& aData )
-    {
-    CMenuItem* item( NULL );
-    if( aData.MenuItem().Id() != KErrNotFound )
-        {   
-        item = CMenuItem::CreateL( iMenu, KMenuTypeMailbox, 0, 0 );
-        CleanupStack::PushL( item );
-        item->SetAttributeL( KMenuAttrLongName, aData.Name() );
-        item->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
-        item->SetAttributeL( KMenuAttrIconId, KMenuMailboxIconId );
-        item->SetAttributeL( KMenuAttrMaskId, KMenuMailboxMaskId );
-        CleanupStack::Pop( item );
-        }
-    return item;
-    }
-
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::ItemIconL
-// Returns MCS default icon if attribute is 'icon' else parses the
-// skin definition from attribute and sets attributes to aMenuItem.
-// ---------------------------------------------------------------------------
-//
-CGulIcon* CCarouselPluginEngine::ItemIconL( CMenuItem* aMenuItem, 
-    const TDesC& aAttr )
-    {
-    
-    CMenuItem* menuItem;
-  
-    // check if item exists in MCS
-    if ( aMenuItem )
-        { 
-        TUint32 flags = aMenuItem->Flags();
-        TUint32 isHidden = flags & TMenuItem::EHidden;
-        TUint32 isMissing = flags & TMenuItem::EMissing;
-
-        if ( iUndefinedItem && ( isHidden || isMissing ) )
-            {
-            menuItem = iUndefinedItem;
-            }
-        else
-            {
-            menuItem = aMenuItem;
-            }
-        }
-    else 
-        {
-        // item not found in MCS. Use Undefined Icon
-        menuItem = iUndefinedItem;
-        }
-
-    CAknIcon* icon( NULL );
-    CGulIcon* gIcon( NULL );
-    TBool exists( ETrue );
-    
-    if ( aAttr != KIcon )
-        {
-        // Resolve secondary icon definition from attribute
-        TPtrC iconDef( menuItem->GetAttributeL( aAttr, exists ) );
-    
-        if ( exists )
-            {
-            exists = ConstructMenuItemForIconL( iconDef, *menuItem );
-            }
-        }
-    
-    if ( exists )
-        {
-        icon = MenuIconUtility::GetItemIconL( *menuItem );
-    
-        if ( icon )
-            {
-            CleanupStack::PushL( icon );
-            
-            gIcon = CGulIcon::NewL( icon->Bitmap(), icon->Mask() );
-            
-            // Detach and delete
-            icon->SetBitmap( NULL );
-            icon->SetMask( NULL );    
-            
-            CleanupStack::PopAndDestroy( icon );
-            }
-        }
-    
-    return gIcon;
-    }
-
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::ItemTextL
-// Returns text string for the given attribute
-// ---------------------------------------------------------------------------
-//
-TPtrC CCarouselPluginEngine::ItemTextL( CMenuItem* aMenuItem, const TDesC& aAttr )
-    {
-
-    CMenuItem* menuItem;
-
-    // check if item exists in MCS
-    if ( aMenuItem )
-        {
-        TUint32 flags = aMenuItem->Flags();
-        TUint32 isHidden = flags & TMenuItem::EHidden;
-        TUint32 isMissing = flags & TMenuItem::EMissing;
-
-        // if item is hidden or missing (mmc card removed)
-        // use "Undefined" text instead
-        if ( iUndefinedItem && ( isHidden || isMissing ) )
-            {
-            menuItem = iUndefinedItem;
-            }
-        else
-            {
-            menuItem = aMenuItem;
-            }
-        }
-    else 
-        {
-        // item not found in MCS. Use "Undefined" text
-        menuItem = iUndefinedItem;
-        }
-    
-    TBool exists( KErrNotFound );
-    
-    TPtrC name( menuItem->GetAttributeL( aAttr, exists ) );
-    
-    if ( exists )
-        {
-        return name;
-        }
-
-    return KNullDesC();
-    }
-
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::LaunchItemL
-// Calls the open command for the given menu item header
-// ---------------------------------------------------------------------------
-//
-void CCarouselPluginEngine::LaunchItemL( const TInt& aIndex )
-    {
-    if ( iBackupRestore )
-        {
-        ShowNoteDlgL( R_MCS_DISABLE_OPEN_ITEM ); 
-        return;
-        }
-
-    CCarouselData& dataItem( iPluginData->DataItemL( aIndex ) );
-    // run item based on its type
-    TPtrC type( dataItem.MenuItem().Type());
-
-    // run folder
-    if ( type == KMenuTypeFolder )
-        {
-        LaunchFolderItemL( dataItem );
-        }
-    else if( type == KMenuTypeUrl )
-        {
-        LaunchBookmarkItemL( dataItem );
-        }
-    else if( type == KMenuTypeMailbox )
-        {
-        LaunchMailboxItemL( dataItem );
-        }
-    else
-        {
-        LaunchMCSItemL( dataItem );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CCarouselPluginEngine::LaunchFolderItemL( CCarouselData& aData )
-    {
-    CMenuItem* item = NULL;
-    TRAP_IGNORE( item = CMenuItem::OpenL( iMenu, aData.MenuItem().Id() ) );
-    
-    // item does not exist at all in MCS
-    if ( item == NULL )
-        {
-        ShowNoteDlgL( R_MCS_DISABLE_OPEN_ITEM_MISSING );
-        return;
-        }
-    
-    CleanupStack::PushL( item );
-    
-    StartEffect( KMMUid );
-    
-    // message for MM application
-    HBufC8* message; 
-
-    // prepare message for launching folder
-    TBool hasApplicationGroupName( EFalse );
-    
-    TPtrC applicationGroupName( item->GetAttributeL(
-        KApplicationGroupName, hasApplicationGroupName ) );
-                                                      
-    if ( !hasApplicationGroupName )
-        {
-        return;
-        }
-    
-    message = HBufC8::NewLC( KMMApplication().Length() + 
-                             KSetFocusString().Length() +
-                             applicationGroupName.Length() + 
-                             KHideExit2().Length() );
-
-    message->Des().Copy( KMMApplication );
-    message->Des().Append( KSetFocusString );
-    message->Des().Append( applicationGroupName );
-    message->Des().Append( KHideExit2 );
-
-    // find MM application
-    TApaTaskList taskList( CCoeEnv::Static()->WsSession() );
-    TApaTask task( taskList.FindApp( KMMUid ) );
-
-    if ( task.Exists() )
-        {
-        // MM is already running in background - send APA Message
-        task.SendMessage( 
-            TUid::Uid( KUidApaMessageSwitchOpenFileValue ), *message );
-        }
-    else
-        { 
-        // MM not running yet - use Command Line Tail
-        RApaLsSession appArcSession;
-        CleanupClosePushL( appArcSession );
-        
-        User::LeaveIfError( appArcSession.Connect() );
-        
-        TApaAppInfo appInfo;
-        TInt err( appArcSession.GetAppInfo( appInfo, KMMUid ) );
-        
-        if ( err == KErrNone )
-            {
-            CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
-            cmdLine->SetExecutableNameL( appInfo.iFullName );
-            cmdLine->SetCommandL( EApaCommandRun );
-            cmdLine->SetTailEndL( *message );
-            appArcSession.StartApp( *cmdLine );
-            CleanupStack::PopAndDestroy( cmdLine );
-            }
-        CleanupStack::PopAndDestroy( &appArcSession ); 
-        }
-    CleanupStack::PopAndDestroy( message );
-    CleanupStack::PopAndDestroy( item );
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CCarouselPluginEngine::LaunchBookmarkItemL( CCarouselData& aData )
-    {
-    StartEffect( KBrowserUid );
-    
-    CSchemeHandler* urlHandler = CSchemeHandler::NewL( aData.Value());    
-    CleanupStack::PushL( urlHandler );
-    urlHandler->HandleUrlStandaloneL();
-    CleanupStack::PopAndDestroy( urlHandler );
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CCarouselPluginEngine::LaunchMailboxItemL( CCarouselData& aData )
-    {
-    TInt id( aData.MenuItem().Id());
-    if ( id == KErrNotFound )
-        {
-        ShowNoteDlgL( R_MCS_DISABLE_OPEN_ITEM_MISSING );
-        return;
-        }
-    
-    StartEffect( KMCSCmailUidValue );
-    
-    TUid uId = TUid::Uid( id );
-    const TVwsViewId viewId( KMCSCmailUidValue, KMCSCmailMailboxViewIdValue );
-    CVwsSessionWrapper* vwsSession = CVwsSessionWrapper::NewL();
-    vwsSession->CreateActivateViewEvent( viewId, uId, KNullDesC8() );
-    delete vwsSession;
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CCarouselPluginEngine::LaunchMCSItemL( CCarouselData& aData )
-    {
-    if( iWatcher->IsActive())
-        {
-        return;
-        }
-    CMenuItem* item = NULL;
-    TRAP_IGNORE( item = CMenuItem::OpenL( iMenu, aData.MenuItem().Id() ) );
-
-    // item does not exist at all in MCS
-    if ( item == NULL )
-        {
-        ShowNoteDlgL( R_MCS_DISABLE_OPEN_ITEM_MISSING );
-        return;
-        }
-
-    CleanupStack::PushL( item );
-    
-    TBool attrExists = ETrue;
-    TPtrC uid = item->GetAttributeL( KMenuAttrUid, attrExists );
-
-    // trying to run hidden or missing application (e.g. unistalled app 
-    // or app on MMC which was removed )
-    // -> We display a note for a user that this is not possible¨
-    TUint32 isHidden = item->Flags() & TMenuItem::EHidden;
-    TUint32 isMissing = item->Flags() & TMenuItem::EMissing;
-
-    if ( ( attrExists && uid == KMenuAttrUndefUid ) || isHidden || isMissing )
-        {
-        CleanupStack::PopAndDestroy( item );
-        ShowNoteDlgL( R_MCS_DISABLE_OPEN_ITEM_MISSING );
-        return;
-        }
-    
-    if ( attrExists )
-        {      
-        StartEffect( ParseHexUidFromString( uid ));
-        }
-    
-    // run application/shortcut
-    CMenuOperation* operation( item->HandleCommandL(
-        KMenuCmdOpen, KNullDesC8, iWatcher->iStatus ) );
-    iWatcher->Watch( operation );
-    CleanupStack::PopAndDestroy( item );
-    }
-
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::HandleNotifyL
-// Handle the change in Menu Content
-// ---------------------------------------------------------------------------
-//
-void CCarouselPluginEngine::HandleNotifyL()
-    {
-    TInt count( iPluginData->DataCount() );
-    
-    for ( TInt i = 0; i < count; i++ )
-        {
-        CCarouselData& data( iPluginData->DataItemL( i ) );
-        data.SetDirty( ETrue );
-        }
-    
-    iPlugin.PublishL();
-    
-    // Notification must be activated again
-    iNotifyWatcher->Cancel();
-    iNotifier.Notify( 0,
-        RMenuNotifier::EItemsAddedRemoved,
-        iNotifyWatcher->iStatus );
-
-    iNotifyWatcher->WatchNotify( this );
-    }
-
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::HandleSessionEventL
-// Handles an event from the message server.
-// ---------------------------------------------------------------------------
-//
-void CCarouselPluginEngine::HandleSessionEventL( TMsvSessionEvent aEvent, 
-    TAny* aArg1, TAny* /*aArg2*/, TAny* /*aArg3*/)
-    {
-    switch ( aEvent )
-        {
-        case EMsvEntriesDeleted:
-            {
-            CMsvEntrySelection* sel = static_cast<CMsvEntrySelection*>( aArg1 );
-            TInt count( sel->Count());
-            for( TInt i = 0; i < count; i++ )
-                {
-                iPluginData->RemoveDataL( sel->At( i ) );
-                }
-            }
-            break;
-        default:
-            break;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::SetBackupRestore
-//
-// ---------------------------------------------------------------------------
-//
-void CCarouselPluginEngine::SetBackupRestore( TBool aBackupRestore )
-    {
-    iBackupRestore = aBackupRestore;
-    }
-
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::ShowSettingsL
-// Launch General Settings plugin
-// ---------------------------------------------------------------------------
-//
-void CCarouselPluginEngine::ShowSettingsL()
-    { 
-    TUid uid = {AI_UID_ECOM_IMPLEMENTATION_SETTINGS_MCSPLUGIN};
-    
-    CGSLauncher* launcher = CGSLauncher::NewLC();
-    launcher->LaunchGSViewL ( uid, KHomescreenUid, iInstanceUid );
-    CleanupStack::PopAndDestroy( launcher );
-    }
-
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::ConstructMenuItemForIconL
-// Syntax: skin(major minor):mif(filename bimapId maskId)
-// ---------------------------------------------------------------------------
-//
-TBool CCarouselPluginEngine::ConstructMenuItemForIconL( const TDesC& aPath, 
-    CMenuItem& aMenuItem )
-   {
-   TInt pos( aPath.Locate( ':' ) );
-   if ( pos == KErrNotFound )
-       {
-       pos = aPath.Length();
-       }
-   TPtrC skin( aPath.Left( pos ) );
-   TInt sf( skin.FindF( KSkin ) );
-   
-   if ( sf == KErrNotFound )
-       {
-       return EFalse;
-       }
-   
-   TPtrC temp( skin.Mid( sf + KSkin().Length() ) );
-   TLex input( temp );   
-   input.SkipSpace();
-   
-   if ( !input.Eos() && input.Peek() == '(' )
-       {
-       input.Inc();
-       }
-   TPtrC majorId( NextIdToken( input ) );
-   TPtrC minorId( NextIdToken( input ) );
-   
-   aMenuItem.SetAttributeL( KMenuAttrIconSkinMajorId, majorId );
-   aMenuItem.SetAttributeL( KMenuAttrIconSkinMinorId, minorId );
-   
-   if ( aPath.Length() > pos && 
-      ( aPath.Mid( pos + 1 ).FindF( KMif ) != KErrNotFound ) )
-       {
-       TPtrC mif( aPath.Mid( pos + 1 ) );
-       TInt mf( mif.FindF( KMif ) );
-       
-       TLex input1( mif.Mid( mf + KMif().Length() ) );
-       input1.SkipSpace();
-       
-       if ( !input1.Eos() && input1.Peek() == '(' )
-          {
-          input1.Inc();
-          }
-       
-       TPtrC file( NextIdToken( input1 ) );
-       TPtrC bitmapId( NextIdToken( input1 ) );
-       TPtrC maskId( NextIdToken( input1 ) );
-       
-       aMenuItem.SetAttributeL( KMenuAttrIconFile, file );
-       aMenuItem.SetAttributeL( KMenuAttrIconId, bitmapId );
-       aMenuItem.SetAttributeL( KMenuAttrMaskId, maskId );
-       }
-   
-   return ETrue;
-   }
-
-// End of file