diff -r 000000000000 -r f72a12da539e idlehomescreen/xmluirendering/uiengine/src/xncomponentfactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idlehomescreen/xmluirendering/uiengine/src/xncomponentfactory.cpp Thu Dec 17 08:40:49 2009 +0200 @@ -0,0 +1,181 @@ +/* +* Copyright (c) 2002-2004 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: Component factory interface +* +*/ + +// User includes +#include "xnappuiadapter.h" +#include "xnviewadapter.h" +#include "xncomponentfactory.h" +#include "xncomponent.h" +#include "xnnodepluginif.h" +#include "xncomponentnodeimpl.h" +#include "xnviewnodeimpl.h" +#include "xncontroladapter.h" +#include "xnpanic.h" +#include "xntype.h" + +// Constants +_LIT8( KToolTip, "tooltip" ); +_LIT8( KView, "view" ); + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// FindParentAdapter +// Find a parent control adapter up the node chain +// ----------------------------------------------------------------------------- +// +static CXnControlAdapter* FindParentAdapter( CXnNode& aNode ) + { + CXnNode* parent( aNode.Parent() ); + + for( ; parent; parent = parent->Parent() ) + { + CXnControlAdapter* control( parent->Control() ); + + if( control ) + { + return control; + } + } + + return NULL; + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// MXnComponentFactory::MXnComponentFactory +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +EXPORT_C MXnComponentFactory::MXnComponentFactory() + { + } + +// ----------------------------------------------------------------------------- +// MXnComponentFactory::CreateXnComponentL +// Creates a component +// ----------------------------------------------------------------------------- +// +EXPORT_C MXnComponentFactory::TXnComponentFactoryResponse MXnComponentFactory::CreateXnComponentL( + CXnNodePluginIf& aNode, + CXnComponent*& aTargetComponent ) + { + const TDesC8& type( aNode.Type()->Type() ); + + MXnComponentFactory::TXnComponentFactoryResponse response = + MakeXnComponentL( aNode, aTargetComponent ); + + CleanupStack::PushL( aTargetComponent ); + + if ( response != EXnFactoryResponseComponentConstructed ) + { + CleanupStack::PopAndDestroy( aTargetComponent ); + + return response; + } + + CXnControlAdapter* parentAdapter( FindParentAdapter( aNode.Node() ) ); + CXnControlAdapter* adapter( MakeXnControlAdapterL( aNode, parentAdapter ) ); + + aTargetComponent->SetNode( aNode ); + + if ( type == KView ) + { + CXnAppUiAdapter* appui = static_cast< CXnAppUiAdapter* >( iAvkonAppUi ); + + adapter->SetContainerWindowL( appui->ViewAdapter().BgControl() ); + + aNode.ViewNodeImpl()->SetComponent( aTargetComponent ); + } + else + { + aNode.ComponentNodeImpl()->SetComponent( aTargetComponent ); + } + + if ( parentAdapter ) + { + parentAdapter->AppendChildL( *adapter, aNode.Node() ); + } + + aTargetComponent->SetControlAdapter( adapter ); + + if ( !adapter ) + { + CleanupStack::Pop( aTargetComponent ); + + return response; + } + + adapter->SetComponent( aTargetComponent ); + adapter->SetComponentsToInheritVisibility( ETrue ); + adapter->MakeVisible( EFalse ); + + if ( type != KToolTip ) + { + // Don't activate tooltip yet + adapter->ActivateL(); + } + + CleanupStack::Pop( aTargetComponent ); + + return response; + } + +// ----------------------------------------------------------------------------- +// MXnComponentFactory::DoesNodeNeedComponentImplL +// Check whether a node needs a component node implementation +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool MXnComponentFactory::DoesNodeNeedComponentImplL( + const TDesC8& /*aType*/ ) + { + return ETrue; + } + +// ----------------------------------------------------------------------------- +// MXnComponentFactory::MakeXnComponentL +// Factory method to create component +// ----------------------------------------------------------------------------- +// +EXPORT_C MXnComponentFactory::TXnComponentFactoryResponse MXnComponentFactory::MakeXnComponentL( + CXnNodePluginIf& /*aNode*/, + CXnComponent*& /*aTargetComponent*/ ) + { + return EXnFactoryResponseComponentNotSupported; + } + +// ----------------------------------------------------------------------------- +// MXnComponentFactory::MakeXnComponentL +// Factory method to create control adapter +// ----------------------------------------------------------------------------- +// +EXPORT_C CXnControlAdapter* MXnComponentFactory::MakeXnControlAdapterL( + CXnNodePluginIf& /*aNode*/, + CXnControlAdapter* /*aParent*/ ) + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// Default destructor +// ----------------------------------------------------------------------------- +// +EXPORT_C MXnComponentFactory::~MXnComponentFactory() + { + }