webengine/widgetengine/src/Widget.cpp
changeset 0 dd21522fd290
child 13 10e98eab6f85
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/widgetengine/src/Widget.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,277 @@
+/*
+* Copyright (c) 2004 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:  
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <SysUtil.h>
+#include "../../bidi.h"
+#include <AknAppUi.h>
+
+#include "Widget.h"
+#include "WidgetFuncs.h"
+#include "WidgetCallbacks.h"
+#include "WidgetEventHandler.h"
+#include "Wrt.h"
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+using namespace KJS;
+const ClassInfo JSWidget::info = { "JSWidget", 0, &WidgetTable, 0 };
+
+// ============================= LOCAL FUNCTIONS ===============================
+/*
+@begin WidgetTable 16
+    openApplication JSWidget::openApplication DontDelete|Function 1
+    openURL JSWidget::openURL DontDelete|Function 1
+    preferenceForKey JSWidget::preferenceForKey DontDelete|Function 1
+    prepareForTransition JSWidget::prepareForTransition DontDelete|Function 1
+    performTransition JSWidget::performTransition DontDelete|Function 0
+    setPreferenceForKey JSWidget::setPreferenceForKey DontDelete|Function 2
+    setNavigationEnabled JSWidget::setNavigationEnabled DontDelete|Function 1
+    identifier JSWidget::identifier DontDelete|ReadOnly
+    onhide JSWidget::onhide DontDelete|ReadOnly
+    onremove JSWidget::onremove DontDelete|ReadOnly
+    onshow  JSWidget::onshow DontDelete|ReadOnly
+    onexit  JSWidget::onexit DontDelete|ReadOnly
+    setDisplayLandscape JSWidget::setDisplayLandscape DontDelete|Function 0
+    setDisplayPortrait JSWidget::setDisplayPortrait DontDelete|Function 0
+    isrotationsupported JSWidget::isRotationSupported DontDelete|ReadOnly
+    wrt JSWidget::wrt  DontDelete|ReadOnly
+@end
+*/
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// JSWidget::JSWidget
+//
+//
+//
+// ----------------------------------------------------------------------------
+JSWidget::JSWidget(MJSWidgetCallbacks* aWidgetCallbacks) :
+                    JSObject(),
+                    d(new WidgetPrivate(aWidgetCallbacks,0,0,0,0))
+{
+}
+
+// ----------------------------------------------------------------------------
+// JSWidget::~JSWidget
+//
+//
+//
+// ----------------------------------------------------------------------------
+JSWidget::~JSWidget()
+{
+    delete d;
+}
+
+// ----------------------------------------------------------------------------
+// JSWidget::type
+//
+//
+//
+// ----------------------------------------------------------------------------
+JSType JSWidget::type() const
+{
+    return ObjectType;
+}
+
+// ----------------------------------------------------------------------------
+// JSWidget::mark
+//
+//
+//
+// ----------------------------------------------------------------------------
+void JSWidget::mark()
+{
+	JSObject::mark();
+	if(d->m_wrt)
+	   d->m_wrt->mark();
+}
+
+// ----------------------------------------------------------------------------
+// JSWidget::toString
+//
+//
+//
+// ----------------------------------------------------------------------------
+UString JSWidget::toString(ExecState *exec) const
+{
+    return "[object JSWidget]";
+}
+
+
+// ----------------------------------------------------------------------------
+// JSWidget::getOwnPropertySlot
+//
+//
+//
+// ----------------------------------------------------------------------------
+bool JSWidget::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
+{
+    const HashEntry* entry = Lookup::findEntry(&WidgetTable, propertyName);
+    if (entry)
+        {
+        slot.setStaticEntry(this, entry, staticValueGetter<JSWidget>);
+        return true;
+        }
+
+    return JSObject::getOwnPropertySlot(exec, propertyName, slot);
+}
+
+
+// ----------------------------------------------------------------------------
+// JSWidget::getValueProperty
+//
+//
+//
+// ----------------------------------------------------------------------------
+JSValue* JSWidget::getValueProperty(KJS::ExecState* exec, int token) const
+{
+
+    switch (token)  {
+        case openApplication:
+        case openURL:
+        case preferenceForKey:
+        case prepareForTransition:
+        case performTransition:
+        case setPreferenceForKey:
+        case setNavigationEnabled:
+        case setDisplayLandscape:
+        case setDisplayPortrait: {
+            JSWidgetFunc *wf = new JSWidgetFunc(exec,token,d->m_callbacks);
+            return wf;
+        }
+        case identifier: {
+            TPtrC tstrUrl(d->m_callbacks->getWidgetBundleId());
+            return jsString(UString((const KJS::UChar*)tstrUrl.Ptr(), tstrUrl.Length()));
+        }
+        case isRotationSupported: {
+            return jsBoolean(iAvkonAppUi->OrientationCanBeChanged());
+        }
+        case wrt: {
+            return d->m_wrt ? d->m_wrt : d->m_wrt = new JSWrt(exec);
+        }
+        default:
+            return throwError(exec, GeneralError);
+    }
+
+}
+
+// ----------------------------------------------------------------------------
+// JSWidget::canPut
+//
+//
+//
+// ----------------------------------------------------------------------------
+bool JSWidget::canPut(ExecState *exec, const Identifier &propertyName) const
+{
+    return true;
+}
+
+// ----------------------------------------------------------------------------
+// JSWidget::put
+//
+//
+//
+// ----------------------------------------------------------------------------
+void JSWidget::put(ExecState *exec, const Identifier &propertyName, JSValue *value, int attr)
+{
+    const HashEntry* entry = Lookup::findEntry(&WidgetTable, propertyName);
+    if (entry) {
+        switch( entry->value ) {
+            case onhide: {
+                delete d->m_hideCallback;
+                d->m_hideCallback = NULL;
+                d->m_hideCallback = new WidgetEventHandler(value, exec->lexicalInterpreter()->globalExec());
+                break;
+            }
+            case onshow: {
+                delete d->m_showCallback;
+                d->m_showCallback = NULL;
+                d->m_showCallback = new WidgetEventHandler(value, exec->lexicalInterpreter()->globalExec());
+                // fire the onShow if the SetVisibilty was called before the onShowCallback was created
+                if (d->m_visibility) {
+                    d->m_visibility = !d->m_visibility;
+                    setVisibility(!d->m_visibility);
+                }
+                break;
+            }
+            case onexit: {
+                delete d->m_exitCallback;
+                d->m_exitCallback = NULL;
+                d->m_exitCallback = new WidgetEventHandler(value, exec->lexicalInterpreter()->globalExec());
+                break;
+            }
+            default:
+                break;
+        }
+    }
+
+}
+
+
+// ----------------------------------------------------------------------------
+// JSWidget::SetVisibility
+// Invokes onShow or onHide callback function depending on the visibility
+// status of the widget
+//
+//
+//
+// ----------------------------------------------------------------------------
+void JSWidget::setVisibility(bool visibility)
+{
+    if (d->m_visibility != visibility) {
+        d->m_visibility = visibility;
+        if(visibility && d->m_showCallback)
+            d->m_showCallback->InvokeCall();
+        else if (d->m_hideCallback)
+            d->m_hideCallback->InvokeCall();
+    }
+}
+
+// ----------------------------------------------------------------------------
+// JSWidget::handleExit
+// Invokes onExit callback function
+//
+//
+//
+// ----------------------------------------------------------------------------
+void JSWidget::handleExit()
+{
+    if (d->m_exitCallback)
+        d->m_exitCallback->InvokeCall();
+}
+//END OF FILE
+
+
+
+