--- /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
+
+
+
+