diff -r 000000000000 -r dd21522fd290 webengine/osswebengine/WebKit/s60/webview/WidgetExtension.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/osswebengine/WebKit/s60/webview/WidgetExtension.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,235 @@ +/* +* 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 "WidgetExtension.h" +#include "WidgetEngineBridge.h" +#if defined(BRDO_LIW_FF) +#include "DeviceBridge.h" +#endif +#include "WebView.h" +#include "WebFrame.h" +#include "WebSurface.h" +#include "StaticObjectsContainer.h" +#include "Frame.h" +#include "Page.h" +#include "Settings.h" +#include "WebCoreFrameBridge.h" +#include "BrCtl.h" +#include "WebCursor.h" +#include "SettingsContainer.h" + +// LOCAL FUNCTION PROTOTYPES + +// ---------------------------------------------------------------------------- +// CWidgetExtension::NewL +// +// +// +// ---------------------------------------------------------------------------- +// +CWidgetExtension* CWidgetExtension::NewL(WebView& aWebKitView, MWidgetCallback& aWidgetCallback) +{ + CWidgetExtension* self = new (ELeave) CWidgetExtension(aWebKitView); + CleanupStack::PushL(self); + self->ConstructL(aWidgetCallback); + CleanupStack::Pop(); + return self; +} + +// ---------------------------------------------------------------------------- +// CWidgetExtension::CWidgetExtension +// +// +// +// ---------------------------------------------------------------------------- +// +CWidgetExtension::CWidgetExtension(WebView& aWebKitView) : + m_webview(&aWebKitView), + m_isWidgetPublishing ( false) +{ +} + + +CWidgetExtension::~CWidgetExtension() +{ + delete m_widgetengine; + m_widgetLibrary.Close(); +#if defined(BRDO_LIW_FF) + delete m_deviceBridge; + m_deviceLibrary.Close(); +#endif +} + +void CWidgetExtension::ConstructL(MWidgetCallback& aWidgetCallback) +{ + if (!m_widgetengine) { + _LIT( KBrowserWidgetEngineName, "widgetengine.dll" ); + User::LeaveIfError( m_widgetLibrary.Load(KBrowserWidgetEngineName) ); + TLibraryFunction entry = m_widgetLibrary.Lookup(1); + if (!entry) { + User::Leave(KErrNotFound); + } + m_widgetengine = (MWidgetEngineBridge*) entry(); + m_widgetcallback = &aWidgetCallback; + + if (m_widgetengine) { + AddJSExtension(_L("widget"),m_widgetengine->Widget(*m_widgetcallback, *this)); + AddJSExtension(_L("menu"),m_widgetengine->Menu(*m_widgetcallback, *this)); + AddJSExtension(_L("MenuItem"),m_widgetengine->MenuItem(*m_widgetcallback, *this)); + } + +#if defined(BRDO_LIW_FF) + // device for SAPI + _LIT( KDeviceDLLName, "jsdevice.dll" ); + User::LeaveIfError( m_deviceLibrary.Load(KDeviceDLLName) ); + TLibraryFunction device_entry = m_deviceLibrary.Lookup(1); + if (!device_entry) { + User::Leave(KErrNotFound); + } + m_deviceBridge = (MDeviceBridge*) device_entry(); + + if (m_deviceBridge) { + AddJSExtension(_L("device"), m_deviceBridge->Device(0)); + } +#endif + + if (m_webview && m_webview->page()) { + WebCore::Settings* settings = m_webview->page()->settings(); + if (settings) { + settings->setUsesDashboardBackwardCompatibilityMode(true); + } + } + + } + + +} + +void CWidgetExtension::AddJSExtension(const TDesC& id, void* obj) +{ + WebCore::Frame* frm = core(m_webview->mainFrame()); + if (frm) { + WebCoreFrameBridge* brdg = frm->bridge(); + if (brdg) { + brdg->addJSExtension(id, static_cast(obj)); + } + } + +} + +void CWidgetExtension::MenuItemSelected(TInt aCommand) +{ + if (m_widgetengine) { + m_widgetengine->MenuItemSelected(aCommand); + } +} + +void CWidgetExtension::AddOptionMenuItemsL( CEikMenuPane& aMenuPane,TInt aResourceId ) +{ + if (m_widgetengine) { + m_widgetengine->AddOptionMenuItemsL(aMenuPane, aResourceId); + } +} + +void CWidgetExtension::DrawTransition(CWindowGc& gc, CFbsBitmap* fbsBm) +{ + + if (m_widgetengine) { + m_widgetengine->DrawTransition(gc,fbsBm); + } + +} + +//From MWidgetExtension +void CWidgetExtension::SetParamL(TBrCtlDefs::TBrCtlWidgetParams aParam, const TDesC& aValue) +{ + if (m_widgetengine) { + m_widgetengine->SetParamL(aParam,aValue); + } +} + +void CWidgetExtension::SetParamL(TBrCtlDefs::TBrCtlWidgetParams aParam, TUint aValue) +{ + if ( aParam == TBrCtlDefs::EWidgetPublishState) { + m_isWidgetPublishing = aValue; + return ; + } + if (m_widgetengine) { + m_widgetengine->SetParamL(aParam,aValue); + switch( aParam ) { + case TBrCtlDefs::EWidgetIdentifier: { + iWidgetId = aValue; +#if defined(BRDO_LIW_FF) + m_deviceBridge->SetUid( iWidgetId); +#endif + break; + } + } + } +} + +TBool CWidgetExtension::HandleCommandL( TInt aCommandId ) +{ + if (m_widgetengine) { + return m_widgetengine->HandleCommandL(aCommandId); + } + return EFalse; +} + +//From WidgetEngineCallbacks +void CWidgetExtension::drawWidgetTransition() +{ + WebSurface* surface = WebCore::StaticObjectsContainer::instance()->webSurface(); + if (surface) { + surface->topView()->DrawDeferred(); + } +} + +CFbsBitmap* CWidgetExtension::offscreenBitmap() +{ + return WebCore::StaticObjectsContainer::instance()->webSurface()->offscreenBitmap(); +} + +void CWidgetExtension::setRightSoftKeyLabel(const TDesC& aText) +{ + if (m_webview && m_webview->brCtl() && m_webview->brCtl()->brCtlSoftkeysObserver()) { + m_webview->brCtl()->brCtlSoftkeysObserver()->UpdateSoftkeyL(EKeyRight, aText, 0, EChangeReasonLoad ); + } + +} + +void CWidgetExtension::setLeftSoftKeyLabel(const TDesC& aText) +{ + if (m_webview && m_webview->brCtl() && m_webview->brCtl()->brCtlSoftkeysObserver()) { + m_webview->brCtl()->brCtlSoftkeysObserver()->UpdateSoftkeyL(EKeyLeft, aText, 0, EChangeReasonLoad ); + } + +} + +void CWidgetExtension::setTabbednavigation(bool aOn) +{ + m_webview->brCtl()->settings()->setTabbedNavigation(aOn); + WebCore::StaticObjectsContainer::instance()->webCursor()->cursorUpdate(true); +} + + +//END OF FILE + + +