diff -r 000000000000 -r dd21522fd290 webengine/widgetengine/src/Widget.cpp --- /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 +#include "../../bidi.h" +#include + +#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); + 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 + + + +