idlehomescreen/xmluirendering/uiengine/src/xncomponentfactory.cpp
changeset 0 f72a12da539e
child 2 08c6ee43b396
--- /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()
+    {
+    }