webengine/osswebengine/WebKit/s60/webview/WidgetExtension.cpp
changeset 0 dd21522fd290
child 13 10e98eab6f85
equal deleted inserted replaced
-1:000000000000 0:dd21522fd290
       
     1 /*
       
     2 * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:   This class represents the Widget Extension object
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include "WidgetExtension.h"
       
    21 #include "WidgetEngineBridge.h"
       
    22 #if defined(BRDO_LIW_FF)
       
    23 #include "DeviceBridge.h"
       
    24 #endif
       
    25 #include "WebView.h"
       
    26 #include "WebFrame.h"
       
    27 #include "WebSurface.h"
       
    28 #include "StaticObjectsContainer.h"
       
    29 #include "Frame.h"
       
    30 #include "Page.h"
       
    31 #include "Settings.h"
       
    32 #include "WebCoreFrameBridge.h"
       
    33 #include "BrCtl.h"
       
    34 #include "WebCursor.h"
       
    35 #include "SettingsContainer.h"
       
    36 
       
    37 // LOCAL FUNCTION PROTOTYPES
       
    38 
       
    39 // ----------------------------------------------------------------------------
       
    40 // CWidgetExtension::NewL
       
    41 //
       
    42 //
       
    43 //
       
    44 // ----------------------------------------------------------------------------
       
    45 //
       
    46 CWidgetExtension* CWidgetExtension::NewL(WebView& aWebKitView, MWidgetCallback& aWidgetCallback)
       
    47 {
       
    48     CWidgetExtension* self = new (ELeave) CWidgetExtension(aWebKitView);
       
    49     CleanupStack::PushL(self);
       
    50     self->ConstructL(aWidgetCallback);
       
    51     CleanupStack::Pop();
       
    52     return self;
       
    53 }
       
    54 
       
    55 // ----------------------------------------------------------------------------
       
    56 // CWidgetExtension::CWidgetExtension
       
    57 //
       
    58 //
       
    59 //
       
    60 // ----------------------------------------------------------------------------
       
    61 //
       
    62 CWidgetExtension::CWidgetExtension(WebView& aWebKitView) : 
       
    63                             m_webview(&aWebKitView), 
       
    64                             m_isWidgetPublishing ( false)
       
    65 {
       
    66 }
       
    67 
       
    68 
       
    69 CWidgetExtension::~CWidgetExtension()
       
    70 {
       
    71     delete m_widgetengine;
       
    72     m_widgetLibrary.Close();
       
    73 #if defined(BRDO_LIW_FF)
       
    74     delete m_deviceBridge;
       
    75     m_deviceLibrary.Close();
       
    76 #endif
       
    77 }
       
    78 
       
    79 void CWidgetExtension::ConstructL(MWidgetCallback& aWidgetCallback)
       
    80 {
       
    81     if (!m_widgetengine) {
       
    82         _LIT( KBrowserWidgetEngineName, "widgetengine.dll" );
       
    83         User::LeaveIfError( m_widgetLibrary.Load(KBrowserWidgetEngineName) );
       
    84         TLibraryFunction entry = m_widgetLibrary.Lookup(1);
       
    85         if (!entry) {
       
    86             User::Leave(KErrNotFound);
       
    87         }
       
    88         m_widgetengine = (MWidgetEngineBridge*) entry();
       
    89         m_widgetcallback = &aWidgetCallback;
       
    90 
       
    91         if (m_widgetengine) {
       
    92             AddJSExtension(_L("widget"),m_widgetengine->Widget(*m_widgetcallback, *this));
       
    93             AddJSExtension(_L("menu"),m_widgetengine->Menu(*m_widgetcallback, *this));
       
    94             AddJSExtension(_L("MenuItem"),m_widgetengine->MenuItem(*m_widgetcallback, *this));
       
    95         }
       
    96 
       
    97 #if defined(BRDO_LIW_FF)
       
    98         // device for SAPI
       
    99         _LIT( KDeviceDLLName, "jsdevice.dll" );
       
   100         User::LeaveIfError( m_deviceLibrary.Load(KDeviceDLLName) );
       
   101         TLibraryFunction device_entry = m_deviceLibrary.Lookup(1);
       
   102         if (!device_entry) {
       
   103             User::Leave(KErrNotFound);
       
   104         }
       
   105         m_deviceBridge = (MDeviceBridge*) device_entry();
       
   106 
       
   107         if (m_deviceBridge) {
       
   108             AddJSExtension(_L("device"), m_deviceBridge->Device(0));
       
   109         }
       
   110 #endif
       
   111 
       
   112         if (m_webview && m_webview->page()) {
       
   113             WebCore::Settings* settings = m_webview->page()->settings();
       
   114             if (settings) {
       
   115                 settings->setUsesDashboardBackwardCompatibilityMode(true);
       
   116             }
       
   117         }
       
   118 
       
   119     }
       
   120 
       
   121 
       
   122 }
       
   123 
       
   124 void CWidgetExtension::AddJSExtension(const TDesC& id, void* obj)
       
   125 {
       
   126     WebCore::Frame* frm = core(m_webview->mainFrame());
       
   127     if (frm) {
       
   128        WebCoreFrameBridge* brdg =  frm->bridge();
       
   129        if (brdg) {
       
   130             brdg->addJSExtension(id, static_cast<KJS::JSObject*>(obj));
       
   131        }
       
   132     }
       
   133 
       
   134 }
       
   135 
       
   136 void CWidgetExtension::MenuItemSelected(TInt aCommand)
       
   137 {
       
   138     if (m_widgetengine) {
       
   139         m_widgetengine->MenuItemSelected(aCommand);
       
   140     }
       
   141 }
       
   142 
       
   143 void CWidgetExtension::AddOptionMenuItemsL( CEikMenuPane& aMenuPane,TInt aResourceId )
       
   144 {
       
   145     if (m_widgetengine) {
       
   146         m_widgetengine->AddOptionMenuItemsL(aMenuPane, aResourceId);
       
   147     }
       
   148 }
       
   149 
       
   150 void CWidgetExtension::DrawTransition(CWindowGc& gc, CFbsBitmap* fbsBm)
       
   151 {
       
   152 
       
   153     if (m_widgetengine) {
       
   154         m_widgetengine->DrawTransition(gc,fbsBm);
       
   155     }
       
   156 
       
   157 }
       
   158 
       
   159 //From MWidgetExtension
       
   160 void CWidgetExtension::SetParamL(TBrCtlDefs::TBrCtlWidgetParams aParam, const TDesC& aValue)
       
   161 {
       
   162     if (m_widgetengine) {
       
   163         m_widgetengine->SetParamL(aParam,aValue);
       
   164     }
       
   165 }
       
   166 
       
   167 void CWidgetExtension::SetParamL(TBrCtlDefs::TBrCtlWidgetParams aParam, TUint aValue)
       
   168 {
       
   169     if ( aParam == TBrCtlDefs::EWidgetPublishState)  {
       
   170         m_isWidgetPublishing = aValue;
       
   171         return ; 
       
   172     }
       
   173     if (m_widgetengine) {
       
   174              m_widgetengine->SetParamL(aParam,aValue);
       
   175              switch( aParam ) {
       
   176                  case TBrCtlDefs::EWidgetIdentifier: {
       
   177                      iWidgetId = aValue;
       
   178 #if defined(BRDO_LIW_FF)
       
   179                      m_deviceBridge->SetUid( iWidgetId);
       
   180 #endif
       
   181                  break;
       
   182                 }
       
   183             }
       
   184         }
       
   185 }
       
   186 
       
   187 TBool CWidgetExtension::HandleCommandL( TInt aCommandId )
       
   188 {
       
   189     if (m_widgetengine) {
       
   190         return m_widgetengine->HandleCommandL(aCommandId);
       
   191     }
       
   192     return EFalse;
       
   193 }
       
   194 
       
   195 //From WidgetEngineCallbacks
       
   196 void CWidgetExtension::drawWidgetTransition()
       
   197 {
       
   198     WebSurface* surface = WebCore::StaticObjectsContainer::instance()->webSurface();
       
   199     if (surface) {
       
   200         surface->topView()->DrawDeferred();
       
   201     }
       
   202 }
       
   203 
       
   204 CFbsBitmap* CWidgetExtension::offscreenBitmap()
       
   205 {
       
   206     return WebCore::StaticObjectsContainer::instance()->webSurface()->offscreenBitmap();
       
   207 }
       
   208 
       
   209 void CWidgetExtension::setRightSoftKeyLabel(const TDesC& aText)
       
   210 {
       
   211     if (m_webview && m_webview->brCtl() && m_webview->brCtl()->brCtlSoftkeysObserver()) {
       
   212         m_webview->brCtl()->brCtlSoftkeysObserver()->UpdateSoftkeyL(EKeyRight, aText, 0, EChangeReasonLoad );
       
   213     }
       
   214 
       
   215 }
       
   216 
       
   217 void CWidgetExtension::setLeftSoftKeyLabel(const TDesC& aText)
       
   218 {
       
   219     if (m_webview && m_webview->brCtl() && m_webview->brCtl()->brCtlSoftkeysObserver()) {
       
   220         m_webview->brCtl()->brCtlSoftkeysObserver()->UpdateSoftkeyL(EKeyLeft, aText, 0, EChangeReasonLoad );
       
   221     }
       
   222 
       
   223 }
       
   224 
       
   225 void CWidgetExtension::setTabbednavigation(bool aOn)
       
   226 {
       
   227     m_webview->brCtl()->settings()->setTabbedNavigation(aOn);
       
   228     WebCore::StaticObjectsContainer::instance()->webCursor()->cursorUpdate(true);
       
   229 }
       
   230 
       
   231 
       
   232 //END OF FILE
       
   233 
       
   234 
       
   235