webengine/widgetengine/src/WidgetClient.cpp
changeset 0 dd21522fd290
child 13 10e98eab6f85
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/widgetengine/src/WidgetClient.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,373 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  This class represents the Widget Extension object
+*
+*/
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <eikenv.h>
+#include <apgcli.h>
+#include <apgtask.h>
+#include <browserlauncher.h>
+#include <widgetmenu.rsg>
+#include <avkon.hrh>
+
+#include "WidgetClient.h"
+#include "Widget.h"
+#include "Renderer.h"
+#include "Preferences.h"
+
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+const TInt KWebBrowserUid = 0x10008D39;
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::NewL
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+CWidgetClient* CWidgetClient::NewL(MWidgetCallback& aWidgetCallback, 
+                                  MWidgetEngineCallbacks& aWidgetEngineCallback, 
+                                  WidgetPreferences* preferences)
+{
+    CWidgetClient* self = new ( ELeave ) CWidgetClient(aWidgetCallback, aWidgetEngineCallback, preferences);
+    CleanupStack::PushL( self );
+    self->ConstructL(aWidgetEngineCallback);
+    CleanupStack::Pop();
+    return self;
+}
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::CWidgetClient
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+CWidgetClient::CWidgetClient(MWidgetCallback& aWidgetCallback, 
+                             MWidgetEngineCallbacks& aWidgetEngineCallback, 
+                             WidgetPreferences* preferences) : 
+                                                            m_preferences (preferences), 
+                                                            m_renderer(0), 
+                                                            m_widgetcallback( &aWidgetCallback ), 
+                                                            m_widgetenginecallback(&aWidgetEngineCallback),
+                                                            m_jswidget(0)
+{
+}
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::~CWidgetClient
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+CWidgetClient::~CWidgetClient()
+{    
+    if (m_jswidget) {
+        KJS::Collector::unprotect(m_jswidget);        
+    }
+    
+    delete m_renderer;
+}
+
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::ConstructL
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+void CWidgetClient::ConstructL(MWidgetEngineCallbacks& aWidgetEngineCallback)
+{    
+    m_jswidget = new KJS::JSWidget(this);     
+    m_renderer = new (ELeave) WidgetRenderer(aWidgetEngineCallback);    
+    KJS::Collector::protect(m_jswidget);
+}
+
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::OnShowSelected
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+void CWidgetClient::onShowSelected()
+{
+    if (m_jswidget) {
+        m_jswidget->setVisibility(true);        
+    }
+}
+
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::OnHideSelected
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+void CWidgetClient::onHideSelected()
+{
+    if (m_jswidget) {
+        m_jswidget->setVisibility(false);        
+    }    
+}
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::OnExitCalled
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+void CWidgetClient::onExitCalled()
+{
+    if (m_jswidget) {
+        m_jswidget->handleExit();        
+    }    
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// From MWidgetExtension
+// -----------------------------------------------------------------------------
+// CWidgetClient::HandleCommandL
+//
+//
+//
+// -----------------------------------------------------------------------------
+//
+TBool CWidgetClient::HandleCommandL( TInt aCommandId )
+{
+    TInt cmnd(aCommandId - (TInt)TBrCtlDefs::ECommandIdBase);
+    
+    if ( cmnd == TBrCtlDefs::ECommandAppForeground ) {
+        onShowSelected();
+        return ETrue;
+    }
+    if ( cmnd == TBrCtlDefs::ECommandAppBackground ) {
+        onHideSelected();
+        return ETrue;
+    }
+    if ((aCommandId == EEikCmdExit) || (aCommandId == EAknCmdExit) || (aCommandId == EAknSoftkeyExit)) {
+        onExitCalled();
+    }
+
+    return EFalse;
+}
+
+// From MWidgetCallbacks
+// ----------------------------------------------------------------------------
+// CWidgetClient::launchApplicationL
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+void CWidgetClient::launchApplicationL(const TUid& aUid, const TDesC& aParam)
+{
+    RApaLsSession apaLsSession;
+    TApaTaskList taskList(CEikonEnv::Static()->WsSession());
+    TApaTask task = taskList.FindApp(aUid);
+
+    if ( task.Exists() ) {
+    
+        task.BringToForeground();
+        if ( aParam.Length() > 0 ) {
+            HBufC8* param8 = HBufC8::NewLC( aParam.Length() );
+            param8->Des().Append( aParam );
+            task.SendMessage( TUid::Uid( 0 ), *param8 );
+            CleanupStack::PopAndDestroy( param8 );
+        }
+    }
+    else {
+    
+        TInt eConnect = KErrNone;
+        if ( !apaLsSession.Handle() ) {
+            eConnect = apaLsSession.Connect();
+        }
+
+        if ( eConnect == KErrNone ) {
+            TThreadId threadId;
+            apaLsSession.StartDocument( aParam, aUid, threadId );
+            apaLsSession.Close();
+        }
+    }
+
+}
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::openApplication
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+void CWidgetClient::openApplication(const TUid& aAppUid, const TDesC& aParam)
+{
+    TRAP_IGNORE( launchApplicationL( aAppUid, aParam ) );
+}
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::openUrl
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+void CWidgetClient::openUrl( const TDesC& aUrl )
+{    
+    HBufC* param = HBufC::NewLC( aUrl.Length() + 2 );
+    param->Des().Append( _L("4 ") );
+    param->Des().Append( aUrl );
+    TRAP_IGNORE( launchApplicationL( TUid::Uid( KWebBrowserUid ), *param ) );
+    CleanupStack::PopAndDestroy( param );
+}
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::getWidgetBundleId
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+TDesC& CWidgetClient::getWidgetBundleId()
+{            
+    return m_preferences->getWidgetBundleId();    
+}
+
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::setNavigationEnabled
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+void CWidgetClient::setNavigationEnabled( TBool aEnable )
+{
+    m_widgetenginecallback->setTabbednavigation(!aEnable);
+}
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::prepareForTransition
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+void CWidgetClient::prepareForTransition( const TDesC& aTransition )
+{    
+    TRAP_IGNORE( m_renderer->prepareForTransitionL( aTransition ) );
+}
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::performTransition
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+void CWidgetClient::performTransition()
+{    
+    TRAP_IGNORE( m_renderer->performTransitionL() );
+}
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::preferenceForKey
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+TInt CWidgetClient::preferenceForKey( const TDesC& aKey, TPtrC& aValue )
+{    
+    TInt ret = KErrNotFound;
+    TRAP_IGNORE( ret = m_preferences->preferenceL( aKey, aValue ) );
+    return ret;
+}
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::setPreferenceForKey
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+void CWidgetClient::setPreferenceForKey( const TDesC& aKey, const TDesC& aValue )
+{    
+    TRAP_IGNORE( m_preferences->setPreferenceL( aKey, aValue ) );
+}
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::removePreferenceForKey
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+void CWidgetClient::removePreferenceForKey( const TDesC& aKey, const TDesC& aValue )
+{    
+    TRAP_IGNORE( m_preferences->removePreferenceL( aKey, aValue ) );
+}
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::setDisplayLandscape
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+void CWidgetClient::setDisplayLandscape()
+{    
+    m_widgetcallback->SetDisplayMode(TBrCtlDefs::EOrientationLandscape);
+}
+
+// ----------------------------------------------------------------------------
+// CWidgetClient::setDisplayPortrait
+//
+//
+//
+// ----------------------------------------------------------------------------
+//
+void CWidgetClient::setDisplayPortrait()
+{   
+    m_widgetcallback->SetDisplayMode(TBrCtlDefs::EOrientationPortrait);
+}
+
+
+//END OF FILE
+
+
+
+