idlehomescreen/xmluicontroller/src/aixuikonmenueventhandler.cpp
branchRCL_3
changeset 9 f966699dea19
parent 5 c743ef5928ba
child 12 119a7c064f0f
child 15 ff572dfe6d86
--- a/idlehomescreen/xmluicontroller/src/aixuikonmenueventhandler.cpp	Tue Feb 02 00:04:13 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1742 +0,0 @@
-/*
-* Copyright (c) 2007-2007 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:  Used for handling XUIKON menu events
-*
-*/
-
-
-#include "aixuikonmenueventhandler.h"
-#include "aiconsts.h"
-#include "aixmluiconstants.h"
-#include "aixmluiutils.h"
-
-#include "mxncomponentinterface.h"
-#include "xnmenuadapter.h"
-#include "xnappuiadapter.h"
-#include "xntext.h"
-#include "xnnodeappif.h"
-#include "xndomnode.h"
-#include "xndomlist.h"
-#include "xntype.h"
-#include <gulicon.h>
-#include <aiutility.h>
-#include <aistrparser.h>
-#include "aifweventhandler.h"
-#include "xnproperty.h"
-#include "xnuiengineappif.h"
-#include "xndompropertyvalue.h"
-#include <aipspropertyobserver.h>
-#include <avkondomainpskeys.h> 
-#include <aknviewappui.h>		//CaknViewAppui
-#include "xnplugindefs.h"
-
-_LIT8( KMenubar, "menubar" );
-_LIT8( KClass, "class" );
-_LIT8( KId, "id" );
-_LIT8( KEditWidget, "edit_widget" );
-_LIT8( KRemoveItem, "removeitem" );
-_LIT8( KWidget, "widget" );
-_LIT8( KRemovable, "removable" );
-_LIT ( KMenuItem, "menuitem");
-
-using namespace AiXmlUiController;
-
-
-// ---------------------------------------------------------------------------
-// FindFromContentModelL
-// ---------------------------------------------------------------------------
-// 
-static CXnNodeAppIf* FindFromContentModelL( CXnNodeAppIf* aNode )
-    {
-    if ( !aNode )
-        {
-        return NULL;
-        }
-
-    CXnProperty* node = aNode->GetPropertyL( KClass ); 
-    if ( node && node->StringValue() == KContentSource )
-        {
-        return aNode;
-        }
-
-    // Recurse children        
-    RPointerArray< CXnNodeAppIf > children( aNode->ChildrenL() );
-    CleanupClosePushL( children );
-
-    CXnNodeAppIf* retval( NULL );
-
-    for ( TInt i = 0; i < children.Count(); i++ )
-        {
-        CXnNodeAppIf* node( FindFromContentModelL( children[i] ) );
-
-        if ( node )
-            {
-            retval = node;
-            break;
-            }
-        }
-
-    CleanupStack::PopAndDestroy( &children );
-
-    return retval;
-    }
-
-// ---------------------------------------------------------------------------
-// FindFromConfigurationL
-// ---------------------------------------------------------------------------
-// 
-static CXnNodeAppIf* FindFromConfigurationL( CXnNodeAppIf* aNode )
-    {
-    if ( !aNode )
-        {
-        return NULL;
-        }
-    // Is this node type of settingsconfiguration
-    if ( aNode->Type()->Type() == KSettingsConfiguration )
-        {
-        return aNode;
-        }
-
-    // Recurse children        
-    RPointerArray< CXnNodeAppIf > children( aNode->ChildrenL() );
-    CleanupClosePushL( children );
-
-    CXnNodeAppIf* retval( NULL );
-
-    for ( TInt i = 0; i < children.Count(); i++ )
-        {               
-        CXnNodeAppIf* node( FindFromConfigurationL( children[i] ) );
-        
-        if ( node )
-            {
-            retval = node;
-            break;
-            }
-        }
-
-    CleanupStack::PopAndDestroy( &children );
-
-    return retval;
-    }
-
-// ---------------------------------------------------------------------------
-// DeletePluginNames
-// ---------------------------------------------------------------------------
-// 
-static void DeletePluginNames( TAny* aObject )
-    {
-    reinterpret_cast<
-        RPointerArray<HBufC16>*>( aObject )->ResetAndDestroy();
-    }
-
-CAIXuikonMenuEventHandler::CAIXuikonMenuEventHandler( TXnUiEngineAppIf& aUiEngine,
-                                                      MAiFwEventHandler* aFwEventHandler,
-                                                      CXnAppUiAdapter* aAppUi )
-  : iCurrentCBA( EAIMenuOff ),
-    iUiEngine( &aUiEngine ),
-    iFwEventHandler( aFwEventHandler ),
-    iAppUi( aAppUi )
-    {
-    }
-
-void CAIXuikonMenuEventHandler::ConstructL()
-    {
-    iStrParser = AiUtility::CreateStrParserL();
-    iKeylockObserver = AiUtility::CreatePSPropertyObserverL
-        ( TCallBack( HandleKeylockEvent, this ),
-            KPSUidAvkonDomain, KAknKeyguardStatus );  
-    }
-
-void CAIXuikonMenuEventHandler::SetObserverL( const TDesC8& aParam, CXnDomNode* aEvent )
-    {
-    if ( aEvent )
-        {
-        CXnNodeAppIf* node( iUiEngine->FindNodeByIdL( aParam, aEvent->Namespace() ) );
-        
-        if ( node && node->Type()->Type() == KMenubar )
-            {
-            XnMenuInterface::MXnMenuInterface* menuIf( NULL );
-            XnComponentInterface::MakeInterfaceL( menuIf, *node );
-    
-            if ( menuIf )
-                {
-                menuIf->SetObserver( *this );
-                }
-            }
-        }
-    }
-
-TInt CAIXuikonMenuEventHandler::HandleKeylockEvent( TAny* aSelf )
-    {
-    // Stop displaying menu when keylock is activated.
-    CAIXuikonMenuEventHandler* self = 
-        static_cast<CAIXuikonMenuEventHandler*>( aSelf );
-    TInt err = KErrNone;
-    TInt value = EKeyguardNotActive;
-    if ( self )
-        {
-        TInt err = self->iKeylockObserver->Get( value );
-        if ( err == KErrNone )
-            {
-			if ( value > EKeyguardNotActive )
-				{
-		        if ( self->iAppUi && self->iCurrentCBA == EAIMenuOn )
-		        	{
-		        	self->iAppUi->StopDisplayingMenuBar();
-		        	TRAP_IGNORE( self->iUiEngine->RefreshMenuL() );
-		        	}			
-				}        				
-            }
-        }
-    return err;
-    }
-
-CAIXuikonMenuEventHandler* CAIXuikonMenuEventHandler::NewL( TXnUiEngineAppIf& aUiEngine,
-                                                            MAiFwEventHandler* aFwEventHandler,
-                                                            CXnAppUiAdapter* aAppUi )
-    {
-    CAIXuikonMenuEventHandler* self = 
-        new( ELeave ) CAIXuikonMenuEventHandler( aUiEngine, aFwEventHandler, aAppUi );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-CAIXuikonMenuEventHandler::~CAIXuikonMenuEventHandler()
-    {
-    Release ( iKeylockObserver );
-    Release( iStrParser );
-    delete iActivationEvent;
-    delete iSettingsEvent;
-                
-    // Delete stored label id's
-    delete iMenuModeLskLabel;
-    delete iMenuModeRskLabel;
-    delete iNormalModeLskLabel;
-    delete iNormalModeRskLabel;  
-    }
-
-TBool CAIXuikonMenuEventHandler::HandleEventL( const TDesC8& aEventString8, CXnNodeAppIf* aOrigin, CXnDomNode* aEvent )
-    {
-    if ( aEventString8 == AiUiDef::xml::event::KScreenDeviceChange )
-        {
-        iUiEngine = iAppUi->UiEngineL();
-        return ETrue;
-        }
-    else if ( aEventString8.Left(KAIDynamicMenuPrefixLen).Compare( KAIDynamicMenuPrefix ) != 0 )
-        {
-        // For optimization when dynamic menu prefix is not found from event string start
-        // return immediate from here.
-        return EFalse;
-        }
-
-    if ( (iCurrentCBA == EAIMenuOff && aEventString8.Find(KAIMenuEventIfMenuOff) >= 0 ) ||
-        (iCurrentCBA == EAIMenuOn && aEventString8.Find(KAIMenuEventIfMenuOn) >= 0) )
-        {
-        TPtrC8 eventString;
-        ParseParameterStringL(aEventString8, eventString);
-        if ( !HandleEventL(eventString, aOrigin, aEvent ) )
-            {
-            // Default action from the event string
-            HBufC16* eventString16 = NULL;
-            eventString16 = iStrParser->CopyToBufferL( eventString16, eventString );
-            CleanupStack::PushL( eventString16 );
-            if ( iFwEventHandler && eventString16 )
-                {
-                iFwEventHandler->HandlePluginEvent( *eventString16 );
-                }
-            CleanupStack::PopAndDestroy( eventString16 );
-            }
-        return ETrue;
-        }
-    else if ( aEventString8 == KAIMenuEventInitPluginItems )
-        {
-        if ( !aEvent )
-            {
-            return ETrue;
-            }
-
-        CXnDomList& children( aEvent->ChildNodes() );
-
-        TInt count( children.Length() );
-
-        for ( TInt i = 0; i < count; i++ )
-            {
-            CXnDomNode* node = static_cast< CXnDomNode* >( children.Item( i ) );
-
-            const TDesC8& type( node->Name() );
-
-            if ( type == XnPropertyNames::action::KProperty )
-                {
-                const TDesC8& id( node->AttributeValue( 
-                                    XnPropertyNames::action::KValue ) );
-
-                if ( id != KNullDesC8 )
-                    {
-                    CXnNodeAppIf* nodeById( iUiEngine->FindNodeByIdL( id, aEvent->Namespace() ) );
-                    
-                    if ( nodeById )
-                        {                            
-                        TBool showItem( DynInitItemL( *nodeById, aOrigin ) ); 
-                                                    
-                        const TDesC8 *value( NULL );
-                        
-                        if ( showItem )
-                            {
-                            value = &XnPropertyNames::style::common::display::KBlock;
-                            }
-                        else
-                            {
-                            value = &XnPropertyNames::style::common::display::KNone;
-                            }            
-
-                        CXnDomStringPool& sp( aEvent->StringPool() );
-
-                        // create property
-                        CXnProperty* prop = CXnProperty::NewL( XnPropertyNames::style::common::KDisplay, 
-                                                               *value, 
-                                                               CXnDomPropertyValue::EString, 
-                                                               sp );
-
-                        CleanupStack::PushL( prop );
-
-                        // and set it
-                        nodeById->SetPropertyL( prop );
-
-                        CleanupStack::Pop( prop );
-                        }
-                    }
-                }
-            }
-
-        return ETrue;
-        }
-    else if ( aEventString8 == KAIMenuEventInitEmptyItems  ||
-              aEventString8 == KAIMenuEventInitWidgetItems )
-        {
-        if ( !aEvent )
-            {
-            return ETrue;
-            }
-
-        CXnProperty* pluginId( aOrigin->GetPropertyL( KPluginId ) );
-        CXnProperty* pluginName( aOrigin->GetPropertyL( KPluginName ) );
-
-        TBool showItem( EFalse );
-
-        if ( aEventString8 == KAIMenuEventInitWidgetItems )
-            {
-            if( pluginId && pluginName && pluginName->StringValue() != KDummy8 )                        
-                {
-                // check if plugin can be removed
-                CXnProperty* removable = GetWidgetPropertyL(*aOrigin, KRemovable);
-                if ( removable && removable->StringValue() == XnPropertyNames::KFalse )
-                    {
-                    showItem = EFalse;
-                    }
-                else
-                    {
-                    showItem = ETrue;
-                    }
-                }                                
-            }
-        else
-            {
-            if ( pluginId && pluginName && pluginName->StringValue() == KDummy8 )
-                {
-                showItem = ETrue;
-                }
-            }
-
-        CXnDomList& children( aEvent->ChildNodes() );
-
-        TInt count( children.Length() );
-
-        for ( TInt i = 0; i < count; i++ )
-            {
-            CXnDomNode* node = static_cast< CXnDomNode* >( children.Item( i ) );
-
-            const TDesC8& type( node->Name() );
-
-            if ( type == XnPropertyNames::action::KProperty )
-                {
-                const TDesC8& id( node->AttributeValue( 
-                                    XnPropertyNames::action::KValue ) );
-
-                if ( id != KNullDesC8 )
-                    {
-                    CXnNodeAppIf* nodeById( iUiEngine->FindNodeByIdL( id, aEvent->Namespace() ) );
-
-                    if ( nodeById )
-                        {
-                        const TDesC8 *value( NULL );
-
-                        if ( showItem )
-                            {
-                            value = &XnPropertyNames::style::common::display::KBlock;
-                            }
-                        else
-                            {
-                            value = &XnPropertyNames::style::common::display::KNone;
-                            }
-
-                        CXnDomStringPool& sp( aEvent->StringPool() );
-
-                        // create property
-                        CXnProperty* prop = CXnProperty::NewL( XnPropertyNames::style::common::KDisplay, 
-                                                               *value, 
-                                                               CXnDomPropertyValue::EString, 
-                                                               sp );
-
-                        CleanupStack::PushL( prop );
-
-                        // and set it
-                        nodeById->SetPropertyL( prop );
-
-                        CleanupStack::Pop( prop );
-                        }
-                    }
-                }
-            }
-
-        return ETrue;
-        }
-    else if ( aEventString8.Find( KAIMenuEventIfMenuOff ) >= 0 )
-        {
-        return ETrue;
-        }
-    else if ( aEventString8.Find( KAIMenuEventIfMenuOn ) >= 0 )
-        {
-        return ETrue;
-        }
-    else if ( aEventString8.Compare( KAIMenuEventGenerateSetActivationEvent ) == 0 )
-        {
-        // Generate set plugin event
-        if ( iFwEventHandler && iActivationEvent )
-            {
-            iFwEventHandler->HandlePluginEvent( *iActivationEvent );
-            }
-        return ETrue;
-        }
-    else if ( aEventString8.Find( KAIMenuEventSetActivationEvent ) >= 0 )
-        {
-        // find event string
-        TPtrC8 eventString;
-        ParseParameterStringL( aEventString8, eventString );
-        delete iActivationEvent;
-        iActivationEvent = NULL;
-        // store activation event (plugin event string)
-        iActivationEvent = iStrParser->CopyToBufferL( iActivationEvent, eventString );
-        return ETrue;
-        }
-    else if (aEventString8.Compare( KAIMenuEventGenerateOpenSettingsEvent ) == 0)
-        {
-        // Generate set plugin event
-        if ( iFwEventHandler && iSettingsEvent )
-            {
-            iFwEventHandler->HandlePluginEvent( *iSettingsEvent );
-            }
-        return ETrue;
-        }
-    else if ( aEventString8.Find( KAIMenuEventSetOpenSettingsnEvent ) >= 0 )
-        {
-        // find event string
-        TPtrC8 eventString;
-        ParseParameterStringL( aEventString8, eventString );
-        delete iSettingsEvent;
-        iSettingsEvent = NULL;
-        // store activation event (plugin event string)
-        iSettingsEvent = iStrParser->CopyToBufferL( iSettingsEvent, eventString );
-        return ETrue;
-        }
-    else if ( aEventString8.Find( KAIMenuEventShowMenuItem ) >= 0 )
-        {
-        if (iCurrentCBA == EAIMenuOn)
-            {
-            // find node by id
-            TPtrC8 menuItem;
-            ParseParameterStringL( aEventString8, menuItem );
-            // set visibility property to visible
-            ShowMenuItemL( menuItem, ETrue, aEvent );
-            }
-        return ETrue;
-        }
-    else if ( aEventString8.Find( KAIMenuEventHideMenuItem ) >= 0 )
-        {
-        if ( iCurrentCBA == EAIMenuOn )
-            {
-            // find node by id
-            TPtrC8 menuItem;
-            ParseParameterStringL( aEventString8, menuItem );
-            // set visibility property to visible
-            ShowMenuItemL( menuItem, EFalse, aEvent );
-            }
-        return ETrue;
-        }
-    else if ( aEventString8.Find( KAIMenuEventShowHideMenuItem ) >= 0 )
-            {
-            if ( iCurrentCBA == EAIMenuOn )
-                {
-                // find node by id
-                TPtrC8 menuItem;
-                ParseParameterStringL( aEventString8, menuItem );
-                // set visibility property
-                if ( IsMenuItemVisibleL( menuItem, aEvent ) )
-                    {
-                    ShowMenuItemL( menuItem, EFalse, aEvent );
-                    }
-                else
-                    {
-                    ShowMenuItemL( menuItem, ETrue, aEvent );
-                    }
-                }
-            return ETrue;
-            }
-    else if ( aEventString8.Compare( KAIMenuEventMenuOn ) == 0 )
-        {
-        if ( iCurrentCBA != EAIMenuOn )
-            {
-            // also updates current state
-            SetCBALabelsL( EAIMenuOn, aEvent );
-            }
-        return ETrue;
-        }
-    else if ( aEventString8.Compare( KAIMenuEventMenuOff ) == 0 )
-        {
-        if ( iCurrentCBA != EAIMenuOff )
-            {
-            // also updates current state
-            SetCBALabelsL( EAIMenuOff, aEvent );
-            }
-        return ETrue;
-        }
-    else if ( ( aEventString8.Find( KAIMenuEventShowAll ) ) >= 0 )
-        {
-        if ( iCurrentCBA == EAIMenuOn )
-            {
-            // Show all menu items. Xuikon actually open the menu it self..
-            TPtrC8 menu;
-            ParseParameterStringL( aEventString8, menu );
-            ShowMenuL( ETrue, menu, aEvent );
-            }
-        return ETrue;
-        }
-    else if ( aEventString8.Find( KAIMenuEventRefresh ) >= 0 )
-        {
-        if ( iCurrentCBA == EAIMenuOn )
-            {
-            iUiEngine->RefreshMenuL();
-            }
-        return ETrue;
-        }
-    else if ( aEventString8.Find( KAIMenuEventHideAll ) >= 0 )
-        {
-        // Hide all menu items
-        TPtrC8 menu;
-        ParseParameterStringL( aEventString8, menu );
-        ShowMenuL( EFalse, menu, aEvent );
-        return ETrue;
-        }
-    else if ( aEventString8.Find( KAIMenuEventSetCloseAction ) >= 0 )
-        {
-        // Set menu mode close action / RSK action
-        TPtrC8 closeActionId;
-        ParseParameterStringL( aEventString8, closeActionId );
-
-        // Store close action macroset node id
-        iCloseActionId.Set( closeActionId );
-        return ETrue;
-        }
-    else if ( aEventString8.Find( KAIMenuEventCloseAction ) >= 0 )
-        {
-        // Decide action
-        if ( iCurrentCBA == EAIMenuOff )
-            {
-            TPtrC8 eventString;
-            ParseParameterStringL( aEventString8, eventString );
-            
-            // Default action
-            HBufC16* eventString16 = NULL;
-            eventString16 = iStrParser->CopyToBufferL( eventString16, eventString );
-            CleanupStack::PushL( eventString16 );
-            if ( iFwEventHandler && eventString16 )
-                {
-                iFwEventHandler->HandlePluginEvent( *eventString16 );
-                }
-            CleanupStack::PopAndDestroy( eventString16 );
-            }
-        else
-            {
-            DoMacrosetL( iCloseActionId, aEvent );
-            }
-        return ETrue;
-        }
-    else if ( aEventString8.Find( KAIMenuEventSetSoftKeyId ) >= 0 )
-        {
-        // Store softkey labels and label node id's
-        TPtrC8 softkeyString;
-        ParseParameterStringL( aEventString8, softkeyString );
-        TPtrC8 softkeyId;
-        ParseParameterStringL( softkeyString, softkeyId );
-        if ( softkeyString.Find( KAIMenuModeLsk ) >= 0)
-            {
-            GetTextFromElementL( iMenuModeLskLabel, softkeyId, aEvent );
-            if ( iMenuModeLskLabel && iMenuModeLskLabel->Length() <= 0 )
-                {
-                delete iMenuModeLskLabel;
-                iMenuModeLskLabel = NULL;
-                }
-            iLskMenuModeNode.Set( softkeyId );
-            }
-        else if ( softkeyString.Find( KAIMenuModeRsk ) >= 0 )
-            {
-            GetTextFromElementL( iMenuModeRskLabel, softkeyId, aEvent );
-            if ( iMenuModeLskLabel && iMenuModeRskLabel->Length() <= 0 )
-                {
-                delete iMenuModeRskLabel;
-                iMenuModeRskLabel = NULL;
-                }
-            iRskMenuModeNode.Set( softkeyId );
-            }
-        else if ( softkeyString.Find( KAINormalModeLskLabel ) >= 0)
-            {
-            GetTextFromElementL( iNormalModeLskLabel, softkeyId, aEvent );
-            iNormalModeLskLabelId.Set( softkeyId );
-            }
-        else if ( softkeyString.Find( KAINormalModeRskLabel ) >= 0)
-            {
-            GetTextFromElementL( iNormalModeRskLabel, softkeyId, aEvent );
-            iNormalModeRskLabelId.Set( softkeyId );
-            }
-        else if ( softkeyString.Find( KAINormalModeLskIcon ) >= 0)
-            {
-            iNormalModeLskIconId.Set( softkeyId );
-            }
-        else if ( softkeyString.Find( KAINormalModeRskIcon ) >= 0)
-            {
-            iNormalModeRskIconId.Set( softkeyId );
-            }
-        else if ( softkeyString.Find( KAIMenuLsk ) >= 0)
-            {
-            iLskId.Set( softkeyId );
-            }
-        else if ( softkeyString.Find( KAIMenuRsk ) >= 0)
-            {
-            iRskId.Set( softkeyId );
-            }
-
-        return ETrue;
-        }
-    else if ( aEventString8.Find( KAIMenuEventSettingsReady ) >= 0)
-        {
-        SetCBALabelsL( EAIMenuOff, aEvent );
-        return ETrue;
-        }
-    else if ( aEventString8.Find( KAIMenuEventDoMacroset ) >= 0 )
-        {
-        // Do defined macro set
-        
-        // Parse macroset node id
-        TPtrC8 macroNodeId;
-        ParseParameterStringL( aEventString8, macroNodeId );
-        if ( macroNodeId != KNullDesC8 )
-            {
-            DoMacrosetL( macroNodeId, aEvent );
-            }
-        return ETrue;
-        }
-    else if ( aEventString8.Find( KAIMenuEventSetDynMenuItemObserver ) >= 0 )
-        {
-        TPtrC8 eventString;
-        ParseParameterStringL( aEventString8, eventString );
-        SetObserverL( eventString, aEvent );
-        return ETrue;
-        }
-    else if ( aEventString8 ==  KAIToggleWidgetsState )
-        {
-        iFwEventHandler->SetPluginsVisibility( iUiEngine->WidgetsVisible() );
-        return ETrue;
-        }
-    else
-        {
-        // Handlers for macroset operations
-        TPtrC8 targetNodeName;
-        ParseParameterStringL( aEventString8, targetNodeName );
-        TBool handledEvent = EFalse;
-        
-        if ( targetNodeName != KNullDesC8 )
-            {
-            CXnNodeAppIf* eventTargetNode = NULL;
-            if ( aEvent )
-                {
-                eventTargetNode = iUiEngine->FindNodeByIdL( targetNodeName, aEvent->Namespace() );
-                }
-            if ( eventTargetNode )
-                {
-                handledEvent = HandleMacroOperationL(
-                                    aEventString8, *eventTargetNode, *aEvent );
-                iUiEngine->RenderUIL( NULL );
-                }
-            }
-        return handledEvent;
-        }
-    }
-
-void CAIXuikonMenuEventHandler::ParseParameterStringL( const TDesC8& aSourcePtr,
-                                                       TPtrC8& aTargetPtr )
-    {
-    // Parses parameter string between the first '(' and last ')'
-    // Trailing and heading white spaces ARE NOT handled!
-    
-    const TInt separatorPos = aSourcePtr.Locate( KEventParameterSeparator );
-    User::LeaveIfError( separatorPos );
-
-    const TInt eventSeparatorPos = aSourcePtr.LocateReverse(
-                                                KEventParameterSeparatorEnd );
-    User::LeaveIfError( eventSeparatorPos );
-
-    // separatorPos + 1 must be smaller than eventSeparatorPos - 1
-    User::LeaveIfError( ( eventSeparatorPos ) - ( separatorPos + 1 ) );
-    
-    // Extract event and parameter string
-    TPtrC8 menuName( aSourcePtr.Mid( separatorPos + 1,
-                                    ( eventSeparatorPos ) - ( separatorPos + 1 ) ) );
-    
-    aTargetPtr.Set( menuName );
-    }
-
-void CAIXuikonMenuEventHandler::SetCBALabelsL( TAICBA aCBA, CXnDomNode* aEvent )
-    {
-    // Set CBA labels according to mode, to the predefined CBA nodes
-    if ( (iLskId == KNullDesC8) || (iRskId == KNullDesC8) || !aEvent )
-        {
-        return;
-        }
-    CXnNodeAppIf* lskNode = iUiEngine->FindNodeByIdL( iLskId, aEvent->Namespace() );
-    CXnNodeAppIf* rskNode = iUiEngine->FindNodeByIdL( iRskId, aEvent->Namespace() );
-
-    TBool propertyUpdated = EFalse;
-
-    if ( rskNode && lskNode )
-        {
-        CXnNodeAppIf* menuBar = lskNode->ParentL();
-
-        XnMenuInterface::MXnMenuInterface* lskControl = NULL;
-        XnMenuInterface::MXnMenuInterface* rskControl = NULL;
-
-        if ( menuBar )
-            {
-            XnComponentInterface::MakeInterfaceL( lskControl, *menuBar );
-            XnComponentInterface::MakeInterfaceL( rskControl, *menuBar );
-            }
-        if ( !lskControl || !rskControl )
-            {
-            return;
-            }
-        switch ( aCBA )
-            {
-            case EAIMenuOff:
-                {
-                CXnNodeAppIf* lskIconNode = NULL;
-                CXnNodeAppIf* rskIconNode = NULL;
-                XnImageInterface::MXnImageInterface* lskIconControl = NULL;
-                XnImageInterface::MXnImageInterface* rskIconControl = NULL;
-                if ( iNormalModeLskIconId != KNullDesC8 )
-                    {
-                    lskIconNode = iUiEngine->FindNodeByIdL( iNormalModeLskIconId, aEvent->Namespace() );
-                    XnComponentInterface::MakeInterfaceL( lskIconControl, *lskIconNode );
-                    }
-
-                if ( iNormalModeRskIconId != KNullDesC8 )
-                    {
-                    rskIconNode = iUiEngine->FindNodeByIdL( iNormalModeRskIconId, aEvent->Namespace() );
-                    XnComponentInterface::MakeInterfaceL( rskIconControl, *rskIconNode );
-                    }
-
-                // Try to set the icon, if the icon setting fails
-                // try to set the text
-                if ( !AttemptRestoreSoftkeyIconL( lskControl,
-                     lskIconControl,
-                     lskIconNode,
-                     XnMenuInterface::MXnMenuInterface::ELeft ) )
-                    {
-                    if ( iNormalModeLskLabelId != KNullDesC8 )
-                        {
-                        GetTextFromElementL( iNormalModeLskLabel, iNormalModeLskLabelId, aEvent );
-                        }
-
-                    SetSoftkeyLabelL( lskControl, iNormalModeLskLabel,
-                            XnMenuInterface::MXnMenuInterface::ELeft );
-                    }
-
-                if ( !AttemptRestoreSoftkeyIconL( rskControl,
-                     rskIconControl,
-                     rskIconNode,
-                     XnMenuInterface::MXnMenuInterface::ERight ) )
-                    {
-                    if ( iNormalModeRskLabelId != KNullDesC8 )
-                        {
-                        GetTextFromElementL( iNormalModeRskLabel, iNormalModeRskLabelId, aEvent );
-                        }
-
-                    SetSoftkeyLabelL( rskControl, iNormalModeRskLabel,
-                            XnMenuInterface::MXnMenuInterface::ERight );
-                    }
-                propertyUpdated = ETrue;
-                break;
-                }
-            case EAIMenuOn:
-                {
-                // Need to set the bitmaps back after
-                // the menu is closed
-                iMenumodeBitmapLsk = NULL;
-                iMenumodeBitmapRsk = NULL;
-                if ( !iMenuModeLskLabel )
-                    {
-                    GetTextFromElementL( iMenuModeLskLabel, iLskMenuModeNode, aEvent );
-                    }
-                SetSoftkeyLabelL( lskControl, iMenuModeLskLabel,
-                        XnMenuInterface::MXnMenuInterface::ELeft );
-
-                if ( !iMenuModeRskLabel )
-                    {
-                    GetTextFromElementL( iMenuModeRskLabel, iRskMenuModeNode, aEvent );
-                    }
-                SetSoftkeyLabelL( rskControl, iMenuModeRskLabel,
-                        XnMenuInterface::MXnMenuInterface::ERight );
-                propertyUpdated = ETrue;
-                break;
-                }
-            default:
-                break;
-            }
-        }
-    iCurrentCBA = aCBA;
-    if ( propertyUpdated )
-        {
-    	iUiEngine->RefreshMenuL();
-        }
-    }
-
-void CAIXuikonMenuEventHandler::ShowMenuL( TBool aShow, const TDesC8& aMenuId, CXnDomNode* aEvent )
-    {
-    if ( aEvent )
-        {
-        // Show or hide all menu items
-        CXnNodeAppIf* lskNode = iUiEngine->FindNodeByIdL( aMenuId, aEvent->Namespace() );
-
-        if ( lskNode )
-            {
-            RecurseChildrenL( aShow, lskNode );
-            }
-        }
-    }
-
-void CAIXuikonMenuEventHandler::RecurseChildrenL( TBool aShow, CXnNodeAppIf* aNode )
-    {
-    RPointerArray<CXnNodeAppIf> children = aNode->ChildrenL();
-    CleanupClosePushL( children );
-
-    for ( TInt i=0; i<children.Count(); i++ )
-        {
-        CXnNodeAppIf* node = children[i];
-        if ( node && ( node->Type()->Type() == KAIMenuItem || 
-                       node->Type()->Type() == KAIMenu ) )
-            {
-            if ( aShow )
-                {
-                SetPropertyToNodeL( *node, XnPropertyNames::style::common::KVisibility,
-                    XnPropertyNames::style::common::visibility::KVisible );
-                }
-            else
-                {
-                SetPropertyToNodeL( *node, XnPropertyNames::style::common::KVisibility,
-                    XnPropertyNames::style::common::visibility::KHidden );
-                }
-
-            if ( node->Type()->Type() == KAIMenu )
-                {
-                RecurseChildrenL(aShow, node);
-                }
-            }
-        }
-
-    CleanupStack::PopAndDestroy( &children );
-    }
-
-void CAIXuikonMenuEventHandler::DoMacrosetL( const TDesC8& aMacrosetNodeId, CXnDomNode* aEvent )
-    {
-    if ( !aEvent )
-        {
-        return;
-        }
-    // Do operations in a macroset
-    CXnNodeAppIf* actionNode = iUiEngine->FindNodeByIdL( aMacrosetNodeId, aEvent->Namespace() );
-    if ( !actionNode )
-        {
-        return;
-        }
-    RPointerArray<CXnNodeAppIf> children = actionNode->ChildrenL();
-    for ( TInt i=0; i<children.Count(); i++ )
-        {
-        CXnNodeAppIf* node = children[i];
-        const TDesC8* value =
-            PropertyValue( *node, XnPropertyNames::action::event::KName );
-        if ( value )
-            {
-            // Set display none
-            TPtrC8 targetNodeName;
-            ParseParameterStringL( *value, targetNodeName );
-            
-            if ( targetNodeName != KNullDesC8 )
-                {
-                CXnNodeAppIf* eventTargetNode = iUiEngine->FindNodeByIdL( targetNodeName, aEvent->Namespace() );
-                if ( eventTargetNode )
-                    {
-                    HandleMacroOperationL( *value, *eventTargetNode, *aEvent );
-                    }
-                }
-            }
-        }
-    children.Reset();
-    }
-
-void CAIXuikonMenuEventHandler::ShowMenuItemL( const TDesC8& aMenuItemId, TBool aShow, CXnDomNode* aEvent )
-    {
-    if ( aEvent )
-        {
-        // Show a single menuitem
-        CXnNodeAppIf* itemNode = iUiEngine->FindNodeByIdL( aMenuItemId, aEvent->Namespace() );
-        if ( itemNode && ( itemNode->Type()->Type() == KAIMenuItem ||
-                           itemNode->Type()->Type() == KAIMenu ) )
-            {
-            if ( aShow )
-                {
-                SetPropertyToNodeL( *itemNode, XnPropertyNames::style::common::KVisibility,
-                        XnPropertyNames::style::common::visibility::KVisible );
-                }
-            else
-                {
-                SetPropertyToNodeL( *itemNode, XnPropertyNames::style::common::KVisibility,
-                        XnPropertyNames::style::common::visibility::KHidden );
-                }
-            }
-        }
-    }
-
-TBool CAIXuikonMenuEventHandler::IsMenuItemVisibleL( const TDesC8& aMenuItemId, CXnDomNode* aEvent )
-    {
-    TBool ret = EFalse;
-    if ( aEvent )
-        {
-        CXnNodeAppIf* itemNode = iUiEngine->FindNodeByIdL( aMenuItemId, aEvent->Namespace() );
-        if ( itemNode && ( itemNode->Type()->Type() == KAIMenuItem ||
-                           itemNode->Type()->Type() == KAIMenu ) )
-            {
-            CXnProperty* visibility = itemNode->GetPropertyL( XnPropertyNames::style::common::KVisibility );
-            if ( visibility && (visibility->StringValue() == XnPropertyNames::style::common::visibility::KVisible) )
-                {
-                ret = ETrue;
-                }
-            }
-        }
-    return ret;
-    }
-
-void CAIXuikonMenuEventHandler::GetTextFromElementL( HBufC8*& aMemberPtr,
-                                                     const TDesC8& aItemId,
-                                                     CXnDomNode* aEvent )
-    {
-    delete aMemberPtr;
-    aMemberPtr = NULL;
-    if ( aEvent )
-        {
-        CXnNodeAppIf* labelNode = iUiEngine->FindNodeByIdL( aItemId, aEvent->Namespace() );
-        
-        if ( labelNode )
-            {
-            if ( labelNode->Type() )
-                {
-                const TDesC8& type = labelNode->Type()->Type();
-                if ( type == XnTextInterface::MXnTextInterface::Type() )
-                    {
-                    XnTextInterface::MXnTextInterface* textControl = NULL;
-                    XnComponentInterface::MakeInterfaceL( textControl, *labelNode );
-                    if ( textControl )
-                        {
-                        // Set text
-                        aMemberPtr = iStrParser->CopyToBufferL( aMemberPtr,
-                                                                *(textControl->Text()) );
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-TBool CAIXuikonMenuEventHandler::HandleMacroOperationL( const TDesC8& aSourcePtr,
-                                                        CXnNodeAppIf& aTargetNode,
-                                                        CXnDomNode& aEvent )
-    {
-    if ( aSourcePtr.Find( KAIMenuEventSetFocus ) >= 0 )
-        {
-        // Set focus
-        aTargetNode.SetStateL( XnPropertyNames::style::common::KFocus );
-        return ETrue;
-        }
-    else if ( aSourcePtr.Find( KAIMenuEventSetDisplayNone ) >= 0 )
-        {
-        SetPropertyToNodeL( aTargetNode, XnPropertyNames::style::common::KDisplay,
-                XnPropertyNames::style::common::display::KNone );
-        return ETrue;
-        }
-    else if ( aSourcePtr.Find( KAIMenuEventSetDisplayBlock) >= 0 )
-        {
-        SetPropertyToNodeL( aTargetNode, XnPropertyNames::style::common::KDisplay,
-                XnPropertyNames::style::common::display::KBlock );
-        return ETrue;
-        }
-    else 
-        {
-        HandleEventL( aSourcePtr, &aTargetNode, &aEvent );
-        return ETrue;
-        }
-    }
-
-TBool CAIXuikonMenuEventHandler::AttemptRestoreSoftkeyIconL(
-                            XnMenuInterface::MXnMenuInterface* aControl,
-                            XnImageInterface::MXnImageInterface* aIconControl,
-                            CXnNodeAppIf* aSourceNode,
-                            XnMenuInterface::MXnMenuInterface::TSoftKeyPosition aPos )
-    {
-    if ( aControl && aSourceNode )
-        {
-        const TDesC8* isVisible =
-                    PropertyValue( *aSourceNode,
-                            XnPropertyNames::style::common::KVisibility );
-
-        // node not "visible" so assume that text has been published
-        // after image
-        if ( !isVisible || *isVisible == XnPropertyNames::style::common::visibility::KHidden )
-            {
-            return EFalse;
-            }
-
-        CGulIcon* icon = NULL;
-        TBool transferOwnership = ETrue;
-        // First try to get the icon from image interface
-        if ( aIconControl )
-            {
-            CFbsBitmap* bitmap = NULL;
-            CFbsBitmap* mask = NULL;
-            aIconControl->ContentBitmaps( bitmap, mask );
-            if ( bitmap )
-                {
-                icon = CGulIcon::NewL( bitmap, mask );
-                icon->SetBitmapsOwnedExternally( ETrue );
-                // image adapter wants to keep ownership
-                transferOwnership = EFalse;
-                CleanupStack::PushL( icon );
-                }
-            }
-        // Then try to load it ourselves.
-        if ( !icon )
-            {
-            const TDesC8* value =
-                PropertyValue( *aSourceNode, XnPropertyNames::image::KPath );
-
-            if ( value )
-                {
-                icon = LoadIconLC( *aSourceNode );
-                icon->SetBitmapsOwnedExternally( ETrue );
-                // transfer ownerhsip to menunode
-                transferOwnership = ETrue;
-                }
-            }
-        // This icon is already in menu, no need to set it
-        // again
-        if ( icon &&
-             (icon->Bitmap() == iMenumodeBitmapLsk ||
-             icon->Bitmap() == iMenumodeBitmapRsk) )
-            {
-            CleanupStack::PopAndDestroy( icon );
-            return ETrue;
-            }
-        else if ( icon )
-            {
-            switch ( aPos )
-                {
-                case XnMenuInterface::MXnMenuInterface::ELeft:
-                    iMenumodeBitmapLsk = icon->Bitmap();
-                    break;
-                case XnMenuInterface::MXnMenuInterface::ERight:
-                    iMenumodeBitmapRsk = icon->Bitmap();
-                    break;
-                default:
-                    break;
-                }
-            aControl->SetSoftKeyImageL(
-                icon->Bitmap(),
-                icon->Mask(),
-                aPos,
-                ETrue, /* preserve aspect ratio */
-                EFalse, /* !invert mask */
-                transferOwnership
-                );
-            CleanupStack::PopAndDestroy( icon );
-            return ETrue;
-            }
-        }
-    return EFalse;
-    }
-
-void CAIXuikonMenuEventHandler::SetSoftkeyLabelL(
-                            XnMenuInterface::MXnMenuInterface* aControl,
-                            const TDesC8* aLabel,
-                            XnMenuInterface::MXnMenuInterface::TSoftKeyPosition aPos )
-    {
-    if ( aControl && aLabel )
-        {
-        HBufC16* string16 = NULL;
-        string16 = iStrParser->CopyToBufferL( string16, *aLabel );
-        CleanupStack::PushL( string16 );
-        // Trapped because this will leave when setting the same again
-        TRAP_IGNORE(
-            aControl->SetSoftKeyTextL( *string16, aPos );
-            )
-        CleanupStack::PopAndDestroy( string16 );
-        }
-    }
-
-TBool CAIXuikonMenuEventHandler::InitEditModeMenuItemL( CXnNodeAppIf& aMenuItem, CXnNodeAppIf* aFocused, const TDesC8& aSource )
-    {
-    TBool showItem( EFalse );
-    CXnNodeAppIf* focused( aFocused );
-    
-    if ( focused && aSource == KContentModel )
-        {
-        CXnNodeAppIf* node = FindFromContentModelL( focused );
-        if ( !node ) 
-            {
-            // no plugin or no launch action
-            return showItem;
-            }
-        CXnProperty* plugin ( node->GetPropertyL( KName ) ) ;
-        if ( !plugin )
-            {
-            // no plugin or no launch action
-            return showItem;
-            }
-        HBufC* pluginName( plugin->StringValueL() );
-        CleanupStack::PushL( pluginName );
-        HBufC* item ( aMenuItem.GetPropertyL( KName )->StringValueL() ); 
-        CleanupStack::PushL( item );
-
-        showItem = iFwEventHandler->HasMenuItem( *pluginName , *item );
-
-        if ( showItem )
-            {
-            // pluginName/menuitem(item)
-            // Create launch event and store it to menuitem's property
-            HBufC8* eventstr = HBufC8::NewLC( pluginName->Length() 
-                                              + 15 // / ( ) 
-                                              + item->Length() );
-            TPtr8 str ( eventstr->Des() );
-            str.Copy( pluginName->Des() );
-            str.Append( TChar( '/' ));
-            str.Append( KMenuItem );
-            str.Append( TChar( '(' ));
-            str.Append( item->Des() );
-            str.Append( TChar( ')' ));
-
-            CXnDomStringPool& sp( iUiEngine->StringPool() );
-
-            CXnDomPropertyValue* newValue = CXnDomPropertyValue::NewL( sp );
-            CleanupStack::PushL( newValue );
-
-            newValue->SetStringValueL( CXnDomPropertyValue::EString, str );
-
-            CXnProperty* prop = CXnProperty::NewL( XnPropertyNames::menu::KEvent, 
-                                                   newValue, sp );
-
-            CleanupStack::Pop( newValue );
-
-            CleanupStack::PushL( prop );
-
-            // and set it
-            aMenuItem.SetPropertyL( prop );
-            CleanupStack::Pop( prop );
-
-            CleanupStack::PopAndDestroy(eventstr ); // eventstr, children
-            }
-
-        CleanupStack::PopAndDestroy( item );
-        CleanupStack::PopAndDestroy( pluginName );
-        }
-    else if ( focused && aSource == KConfigurationModel ) 
-        {
-        CXnNodeAppIf* node( FindFromConfigurationL( focused ) );
-
-        if ( node )
-            {
-            CXnProperty* launch( node->GetPropertyL( KLaunch ) );
-            CXnProperty* plugin( node->GetPropertyL( KName ) );
-
-            if ( !launch || !plugin )
-                {
-                // no plugin or no launch action
-                return showItem;
-                }
-
-            HBufC* pluginName( plugin->StringValueL() );
-            CleanupStack::PushL( pluginName );
-
-            CXnProperty* prop( aMenuItem.GetPropertyL( KName ) );
-
-            if ( prop )
-                {
-                HBufC* item( prop->StringValueL() );
-                CleanupStack::PushL( item );
-
-                showItem = iFwEventHandler->HasMenuItem( *pluginName, *item );
-
-                CleanupStack::PopAndDestroy( item );
-                }
-            else
-                {
-                showItem = iFwEventHandler->HasMenuItem( *pluginName, KNullDesC );
-                }
-
-            CleanupStack::PopAndDestroy( pluginName );
-
-            if ( showItem )
-                {
-                // Create launch event and store it to menuitem's property
-                RPointerArray<CXnNodeAppIf> children( node->ChildrenL() );
-                CleanupClosePushL( children );
-
-                TInt count( children.Count() );
-
-                TInt length( launch->StringValue().Length() + 2 ); // +2 for '(' and ')'
-
-                for ( TInt i = 0; i < count; i++ )
-                    {
-                    if ( i > 0 )
-                        {
-                        length += 1;
-                        }
-
-                    CXnProperty* prop( children[i]->GetPropertyL( KName ) );
-
-                    if ( prop )
-                        {
-                        length += prop->StringValue().Length();
-                        }
-                    }
-
-                HBufC8* eventstr = HBufC8::NewLC( length );
-
-                TPtr8 str( eventstr->Des() );
-
-                str.Append( launch->StringValue() );
-
-                str.Append( TChar( '(' ) );
-
-                for ( TInt i = 0; i < count; i++ )
-                    {
-                    if ( i > 0 )
-                        {
-                        str.Append( TChar( ',' ) ); 
-                        }
-
-                    CXnProperty* prop( children[i]->GetPropertyL( KName ) );
-
-                    if ( prop )
-                        {
-                        str.Append( prop->StringValue() );
-                        }
-                    }
-
-                str.Append( TChar( ')' ) );
-
-                CXnDomStringPool& sp( iUiEngine->StringPool() );
-
-                CXnDomPropertyValue* newValue = CXnDomPropertyValue::NewL( sp );
-                CleanupStack::PushL( newValue );
-
-                newValue->SetStringValueL( CXnDomPropertyValue::EString, str );
-
-                CXnProperty* prop = CXnProperty::NewL( XnPropertyNames::menu::KEvent, 
-                                                       newValue, sp );
-
-                CleanupStack::Pop( newValue );
-
-                CleanupStack::PushL( prop );
-
-                // and set it
-                aMenuItem.SetPropertyL( prop );
-                CleanupStack::Pop( prop );
-
-                CleanupStack::PopAndDestroy( 2, &children ); // eventstr, children
-                }
-            }
-        }
-
-    return showItem;
-    }
-
-TBool CAIXuikonMenuEventHandler::InitDefaultModeMenuItemL( CXnNodeAppIf& aMenuItem, CXnNodeAppIf* aFocused, const TDesC8& aSource )
-    {
-    TBool showItem( EFalse );
-    TInt len( 0 );
-    if ( aSource == KContentModel )
-        {
-        CXnProperty* prop( aMenuItem.GetPropertyL( KName ) );
-        if ( !prop )
-            {
-            return showItem;
-            }
-
-        RPointerArray<HBufC16> plnNames;
-        CleanupStack::PushL( TCleanupItem( DeletePluginNames, &plnNames ) );
-
-        CXnNodeAppIf* focused( aFocused );
-        HBufC* item ( prop->StringValueL() );
-	    CleanupStack::PushL( item );
-	   
-	    if( item->Des() == KHSOnLine_OffLine() ) 
-	    	{
-	    	TBool webContent = EFalse;
-	    	RPointerArray<CXnNodeAppIf> plugins = iUiEngine->FindNodeByClassL( KContentSource16 ) ;
-	    	CleanupClosePushL( plugins );
-			if( plugins.Count() <= 0  )
-				{
-				CleanupStack::PopAndDestroy(&plugins);
-				CleanupStack::PopAndDestroy( item );
-				CleanupStack::PopAndDestroy(&plnNames);
-				return showItem;
-				}
-			for (TInt i = 0; i < plugins.Count(); i++)
-				{
-				 CXnProperty* property ( plugins[i]->GetPropertyL( KName ) ) ;
-				 if ( property )
-					 {
-					 HBufC16* pluginName ( property->StringValueL() );
-					 CleanupStack::PushL( pluginName ); 
-					 if( iFwEventHandler->HasMenuItem( *pluginName , *item ) )
-						 {
-                         webContent = ETrue;	 
-                         CleanupStack::PopAndDestroy( pluginName );
-						 break;
-						 }
-				     CleanupStack::PopAndDestroy( pluginName );
-					 }
-				}
-			CleanupStack::PopAndDestroy(&plugins);
-			
-			// At least one widget using web content
-	    	if ( webContent )
-	    		{
-	    		CXnProperty* status( aMenuItem.GetPropertyL(KStatus) );
-				if ( status )
-					{
-					HBufC* statusValue ( status->StringValueL() );
-					CleanupStack::PushL( statusValue );
-					if ( (statusValue->Des() == KHSOnLine()) && !iFwEventHandler->IsPluginsOnline() )
-					   {
-					   plnNames.AppendL( KHSOnLine().Alloc() );
-					   len = KHSOnLine().Length();
-					   }
-					else if ( (statusValue->Des() == KHSOffLine()) && iFwEventHandler->IsPluginsOnline() )
-					   {
-					   plnNames.AppendL( KHSOffLine().Alloc() );
-					   len = KHSOffLine().Length();
-					   }
-					 CleanupStack::PopAndDestroy( statusValue );
-					}
-	    		}
-	    	}
-	    else
-	    	{
-			if( focused )  
-				{
-				RPointerArray< CXnNodeAppIf > plugins;
-				CleanupClosePushL( plugins );
-				
-				iUiEngine->GetPluginNodeArrayL( plugins );
-							
-				CXnNodeAppIf* node( NULL );
-				
-				for( ; focused; focused = focused->ParentL() )
-					{
-					if( plugins.Find( focused ) != KErrNotFound )
-						{                    
-						node = FindFromContentModelL( focused );                    
-						break;
-						}
-					}
-					
-				CleanupStack::PopAndDestroy( &plugins );
-							 
-				 if( !node ) 
-					 {
-					 // no plugin or no launch action
-					 CleanupStack::PopAndDestroy(item );
-					 CleanupStack::PopAndDestroy(&plnNames);
-					 return showItem;
-					 }
-				 CXnProperty* plugin ( node->GetPropertyL( KName ) ) ;
-				 if( !plugin )
-					{
-					// no plugin or no launch action
-					CleanupStack::PopAndDestroy(item );
-					CleanupStack::PopAndDestroy(&plnNames);
-					return showItem;
-					}
-				 HBufC16* pluginName( plugin->StringValueL() );
-				 CleanupStack::PushL( pluginName );
-				 if( iFwEventHandler->HasMenuItem( *pluginName , *item ) )
-					 {
-					 plnNames.AppendL( pluginName );
-					 len += pluginName->Length();
-					 CleanupStack::Pop( pluginName );
-					 } 
-				 else
-					 {
-					 CleanupStack::PopAndDestroy( pluginName );
-					 }
-				}
-		   else
-			   {
-				RPointerArray<CXnNodeAppIf> plugins = iUiEngine->FindNodeByClassL( KContentSource16 ) ;
-				if( plugins.Count() <= 0  )
-					{
-					CleanupStack::PopAndDestroy( item );
-					CleanupStack::PopAndDestroy(&plnNames);
-					return showItem;
-					}
-				CleanupClosePushL( plugins );
-				for (TInt i = 0; i < plugins.Count(); i++)
-					{
-					 CXnProperty* property ( plugins[i]->GetPropertyL( KName ) ) ;
-					 if ( property )
-						 {
-						 HBufC16* pluginName ( property->StringValueL() );
-						 CleanupStack::PushL( pluginName ); 
-						 if( iFwEventHandler->HasMenuItem( *pluginName , *item ) )
-							 {
-							 plnNames.AppendL( pluginName );	 
-							 len += pluginName->Length();
-							 CleanupStack::Pop( pluginName );
-							 }
-						 else
-							 {
-							 CleanupStack::PopAndDestroy( pluginName );
-							 }
-						 }
-					}
-				 CleanupStack::PopAndDestroy(&plugins);
-			   }
-	    	}
-	    
-         TInt count = plnNames.Count();
-    	 if( count > 0 )
-            {
-            showItem = ETrue;
-            // [pluginName1,...]/menuitem(item)
-            // Create launch event and store it to menuitem's property
-            HBufC8* eventstr = HBufC8::NewLC( len + 
-                                              + 15 // / ( ) [ ]
-                                              + item->Length() );
-            TPtr8 str ( eventstr->Des() );
-            str.Copy( KOpenBrace );
-            for ( TInt i = 0; i < count; i++ )
-                {
-                str.Append( plnNames[i]->Des() );
-                if ( i+1 != count ) str.Append( TChar( ',' ) );
-                }
-            str.Append( KCloseBrace );
-            str.Append( TChar( '/' ) );
-            str.Append( KMenuItem );
-            str.Append( TChar( '(' ) );
-            str.Append( item->Des() );
-            str.Append( TChar( ')' ) );
-
-            CXnDomStringPool& sp( iUiEngine->StringPool() );
-
-            CXnDomPropertyValue* newValue = CXnDomPropertyValue::NewL( sp );
-            CleanupStack::PushL( newValue );
-
-            newValue->SetStringValueL( CXnDomPropertyValue::EString, str );
-
-            CXnProperty* prop = CXnProperty::NewL( XnPropertyNames::menu::KEvent, 
-                                                   newValue, sp );
-
-            CleanupStack::Pop( newValue );
-
-            CleanupStack::PushL( prop );
-
-            // and set it
-            aMenuItem.SetPropertyL( prop );
-            CleanupStack::Pop( prop );
-
-            CleanupStack::PopAndDestroy( eventstr ); // eventstr, children
-            }
-
-        CleanupStack::PopAndDestroy( item );
-        CleanupStack::PopAndDestroy( &plnNames );
-        }
-    else if ( aFocused && aSource == KConfigurationModel ) 
-        {
-        CXnNodeAppIf* node( FindFromConfigurationL( aFocused ) );
-
-        if ( node )
-            {
-            CXnProperty* launch( node->GetPropertyL( KLaunch ) );
-            CXnProperty* plugin( node->GetPropertyL( KName ) );
-
-            if ( !launch || !plugin )
-                {
-                // no plugin or no launch action
-                return showItem;
-                }
-
-            HBufC* pluginName( plugin->StringValueL() );
-            CleanupStack::PushL( pluginName );
-
-            CXnProperty* prop( aMenuItem.GetPropertyL( KName ) );
-
-            if ( prop )
-                {
-                HBufC* item( prop->StringValueL() );
-                CleanupStack::PushL( item );
-
-                showItem = iFwEventHandler->HasMenuItem( *pluginName, *item );
-
-                CleanupStack::PopAndDestroy( item );
-                }
-            else
-                {
-                showItem = iFwEventHandler->HasMenuItem( *pluginName, KNullDesC );
-                }
-
-            CleanupStack::PopAndDestroy( pluginName );
-
-            if ( showItem )
-                {
-                // Create launch event and store it to menuitem's property
-                RPointerArray<CXnNodeAppIf> children( node->ChildrenL() );
-                CleanupClosePushL( children );
-
-                TInt count( children.Count() );
-
-                TInt length( launch->StringValue().Length() + 2 ); // +2 for '(' and ')'
-
-                for ( TInt i = 0; i < count; i++ )
-                    {
-                    if ( i > 0 )
-                        {
-                        length += 1;
-                        }
-
-                    CXnProperty* prop( children[i]->GetPropertyL( KName ) );
-
-                    if ( prop )
-                        {
-                        length += prop->StringValue().Length();
-                        }
-                    }
-
-                HBufC8* eventstr = HBufC8::NewLC( length );
-
-                TPtr8 str( eventstr->Des() );
-
-                str.Append( launch->StringValue() );
-
-                str.Append( TChar( '(' ) );
-
-                for ( TInt i = 0; i < count; i++ )
-                    {
-                    if ( i > 0 )
-                        {
-                        str.Append( TChar( ',' ) ); 
-                        }
-
-                    CXnProperty* prop( children[i]->GetPropertyL( KName ) );
-
-                    if ( prop )
-                        {
-                        str.Append( prop->StringValue() );
-                        }
-                    }
-
-                str.Append( TChar( ')' ) );
-
-                CXnDomStringPool& sp( iUiEngine->StringPool() );
-
-                CXnDomPropertyValue* newValue = CXnDomPropertyValue::NewL( sp );
-                CleanupStack::PushL( newValue );
-
-                newValue->SetStringValueL( CXnDomPropertyValue::EString, str );
-
-                CXnProperty* prop = CXnProperty::NewL( XnPropertyNames::menu::KEvent, 
-                                                       newValue, sp );
-
-                CleanupStack::Pop( newValue );
-
-                CleanupStack::PushL( prop );
-
-                // and set it
-                aMenuItem.SetPropertyL( prop );
-                CleanupStack::Pop( prop );
-
-                CleanupStack::PopAndDestroy( 2, &children ); // eventstr, children
-                }
-            }
-        }
-
-    // Currently we don't support default mode dynamic menu item for ConfigurationModel
-    return showItem;
-    }
-
-CXnProperty* CAIXuikonMenuEventHandler::GetWidgetPropertyL(CXnNodeAppIf& aPlugin, const TDesC8& aProperty)
-    {
-    CXnProperty* retval = NULL;
-    RPointerArray<CXnNodeAppIf> children(aPlugin.ChildrenL());
-    CleanupClosePushL( children );
-    TInt childCount = children.Count();
-    for (TInt i = 0; i < childCount; i++)
-        {
-        //search for widget element and get given property
-        CXnNodeAppIf* widget = children[i];
-        if (widget && widget->InternalDomNodeType() == KWidget)
-            {
-            retval = widget->GetPropertyL(aProperty);
-            i = childCount;
-            }
-        }
-    CleanupStack::PopAndDestroy( &children );
-    return retval;
-    }
-
-TBool CAIXuikonMenuEventHandler::DynInitItemL( CXnNodeAppIf& aMenuItem, CXnNodeAppIf* aFocused )
-    {
-    CXnProperty* prop( aMenuItem.GetPropertyL( KSource ) );
-    if ( prop )
-        {
-        if ( prop && prop->StringValue().Length() > 0 )
-            {
-            if ( iUiEngine->IsEditMode() )
-                {
-                return InitEditModeMenuItemL( aMenuItem, aFocused, prop->StringValue() );
-                }
-            else
-                {
-                return InitDefaultModeMenuItemL( aMenuItem, aFocused, prop->StringValue() ); 
-                }
-            }
-        }
-    else
-        {
-        CXnProperty* idProp( aMenuItem.GetPropertyL( KId ) );
-        if ( idProp )
-            {
-            const TDesC8& id = idProp->StringValue();
-            if ( id == KEditWidget )
-                {                
-                if ( aFocused )
-                    {
-                    for ( CXnNodeAppIf* candidate = aFocused; candidate; candidate = candidate->ParentL() )
-                        {
-                        if ( candidate->InternalDomNodeType() == KPlugin && !iUiEngine->IsEditMode() )
-                            {
-                            return ETrue;
-                            }
-                        }
-                    }
-                }
-            else if( id == KRemoveItem && iUiEngine->IsEditMode() )
-                {
-                // get plugin node from focused
-                CXnNodeAppIf* node = aFocused;
-                CXnNodeAppIf* pluginNode = NULL;
-                for(; node && node->Type()->Type() != KView; node = node->ParentL() )
-                    {
-                    CXnProperty* configurationId( node->GetPropertyL( KConfigurationId ) );
-                    CXnProperty* pluginId( node->GetPropertyL( KPluginId ) );
-                    
-                    if( configurationId && pluginId )
-                        {           
-                        pluginNode = node;
-                        break;
-                        }
-                    }
-                
-                if( pluginNode )
-                    {
-                    // check if plugin can be removed
-                    CXnProperty* removable = GetWidgetPropertyL(*pluginNode, KRemovable);
-                    if ( removable && removable->StringValue() == XnPropertyNames::KFalse )
-                        {
-                        return EFalse;
-                        }
-                    // hide menu item if the focused plugin is an "empty" widget
-                    CXnProperty* pluginName = pluginNode->GetPropertyL( KPluginName );
-                    if( pluginName )
-                        {
-                        const TDesC8& nameStr = pluginName->StringValue();
-                        if( nameStr == KDummy8 )
-                            {
-                            return EFalse;
-                            }
-                        else
-                            {
-                            return ETrue;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        
-    return EFalse;        
-    }
-
-
-TBool CAIXuikonMenuEventHandler::DynInitMenuItemL( CXnNodeAppIf& aMenuItem )
-    {      
-    TBool ret = EFalse;
-    if( !iUiEngine->WidgetsVisible() )
-        {
-        // only online/offline dynamic menu item is allowed to show now
-        CXnProperty* prop( aMenuItem.GetPropertyL(KName) );
-        if ( prop )
-        	{
-        	HBufC* item ( prop->StringValueL() );
-        	CleanupStack::PushL( item );
-        	if (item->Des() == KHSOnLine_OffLine() )
-        		{
-        		ret = DynInitItemL( aMenuItem, iUiEngine->FocusedNode() );
-        		}
-        	CleanupStack::PopAndDestroy( item );
-        	}
-        }
-    else
-    	{
-    	ret = DynInitItemL( aMenuItem, iUiEngine->FocusedNode() );
-    	}
-    return ret;
-    }
-