diff -r 5f0182e07bfb -r 5456b4e8b3a8 idlehomescreen/xmluirendering/uiengine/src/xnitemactivator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idlehomescreen/xmluirendering/uiengine/src/xnitemactivator.cpp Wed Sep 01 12:32:46 2010 +0100 @@ -0,0 +1,212 @@ +/* +* Copyright (c) 2008 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: Item activator +* +*/ + +// System includes + +// User includes +#include "xnappuiadapter.h" +#include "xnuiengine.h" +#include "xneditor.h" +#include "xndomstringpool.h" +#include "xndomdocument.h" +#include "xnproperty.h" +#include "xnnodeimpl.h" +#include "xnnode.h" +#include "xntype.h" +#include "xnodt.h" + +#include "xnitemactivator.h" + +// Constants +_LIT8( KMenuItem, "menuitem" ); +_LIT8( KDynMenuItem, "dynmenuitem" ); +_LIT8( KWidgetMenuItem, "widgetmenuitem" ); + +// ============================ LOCAL FUNCTIONS ================================ +// ----------------------------------------------------------------------------- +// BuildActivateTriggerNodeL +// +// ----------------------------------------------------------------------------- +// +static CXnNode* BuildActivateTriggerNodeL( CXnUiEngine& aUiEngine ) + { + CXnNode* node = CXnNode::NewL(); + CleanupStack::PushL( node ); + CXnType* type = CXnType::NewL( XnPropertyNames::action::KTrigger ); + CleanupStack::PushL( type ); + CXnNodeImpl* impl = CXnNodeImpl::NewL( type ); + CleanupStack::Pop( type ); + node->SetImpl( impl ); + node->SetUiEngine( aUiEngine ); + CXnDomPropertyValue* nameValue = CXnDomPropertyValue::NewL( + aUiEngine.ODT()->DomDocument().StringPool() ); + CleanupStack::PushL( nameValue ); + nameValue->SetStringValueL( CXnDomPropertyValue::EString, + XnPropertyNames::action::trigger::name::KActivate ); + CXnProperty* name = CXnProperty::NewL( + XnPropertyNames::action::trigger::KName, + nameValue, + *aUiEngine.ODT()->DomDocument().StringPool() ); + CleanupStack::Pop( nameValue ); + CleanupStack::PushL( name ); + node->SetPropertyL( name ); + CleanupStack::Pop( name ); + CleanupStack::Pop( node ); + return node; + } + +// ----------------------------------------------------------------------------- +// IsMenuItem +// +// ----------------------------------------------------------------------------- +// +static TBool IsMenuItem( CXnNode& aItem ) + { + const TDesC8& type( aItem.Type()->Type() ); + + return ( type == KMenuItem || + type == KDynMenuItem || + type == KWidgetMenuItem ); + } + +// ============================ MEMBER FUNCTIONS =============================== +// ----------------------------------------------------------------------------- +// CXnItemActivator::NewL() +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CXnItemActivator* CXnItemActivator::NewL( CXnAppUiAdapter& aAppUiAdapter ) + { + CXnItemActivator* self = CXnItemActivator::NewLC( aAppUiAdapter ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CXnItemActivator::NewLC() +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CXnItemActivator* CXnItemActivator::NewLC( CXnAppUiAdapter& aAppUiAdapter ) + { + CXnItemActivator* self = new ( ELeave ) CXnItemActivator( aAppUiAdapter ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CXnItemActivator::~CXnItemActivator() +// C++ default destructor. +// ----------------------------------------------------------------------------- +// +CXnItemActivator::~CXnItemActivator() + { + Cancel(); + + delete iTrigger; + } + +// ----------------------------------------------------------------------------- +// CXnItemActivator::CXnItemActivator() +// C++ default constructor. +// ----------------------------------------------------------------------------- +// +CXnItemActivator::CXnItemActivator( CXnAppUiAdapter& aAppUiAdapter ) + : CTimer( CActive::EPriorityUserInput + 1 ), iAppUiAdapter( aAppUiAdapter ) + { + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CXnItemActivator::ConstructL() +// 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CXnItemActivator::ConstructL() + { + CTimer::ConstructL(); + + iTrigger = BuildActivateTriggerNodeL( iAppUiAdapter.UiEngine() ); + } + +// ----------------------------------------------------------------------------- +// CXnItemActivator::RunL() +// +// ----------------------------------------------------------------------------- +// +void CXnItemActivator::RunL() + { + CXnNode* item( iItemToActivate ); + + iItemToActivate = NULL; + + if ( item && iAppUiAdapter.IsForeground() ) + { + iAppUiAdapter.UiEngine().DisableRenderUiLC(); + + item->ReportXuikonEventL( *iTrigger ); + + CleanupStack::PopAndDestroy(); // DisableRenderUiLC + } + } + +// ----------------------------------------------------------------------------- +// CXnItemActivator::RunError() +// +// ----------------------------------------------------------------------------- +// +TInt CXnItemActivator::RunError( TInt aError ) + { + return aError; + } + +// ----------------------------------------------------------------------------- +// CXnItemActivator::DoCancel() +// +// ----------------------------------------------------------------------------- +// +void CXnItemActivator::DoCancel() + { + iItemToActivate = NULL; + } + +// ----------------------------------------------------------------------------- +// CXnItemActivator::ActivateL() +// +// ----------------------------------------------------------------------------- +// +void CXnItemActivator::ActivateL( CXnNode* aItemToActivate ) + { + if ( aItemToActivate ) + { + Cancel(); + + iItemToActivate = aItemToActivate; + + if ( IsMenuItem( *aItemToActivate ) ) + { + RunL(); + } + else + { + After( 0 ); + } + } + } + +// End of file