diff -r 000000000000 -r dd21522fd290 webengine/widgetengine/src/MenuFuncs.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/widgetengine/src/MenuFuncs.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,185 @@ +/* +* Copyright (c) 2003 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: +* +*/ + + + +// INCLUDES +#include +#include + + +#include "Menu.h" +#include "MenuItem.h" +#include "MenuFuncs.h" +#include "MenuCallbacks.h" + +using namespace KJS; + +// ---------------------------------------------------------------------------- +// JSMenuFunc::JSMenuFunc +// Default constructor +// +// +// ---------------------------------------------------------------------------- +JSMenuFunc::JSMenuFunc( ExecState* exec, MJSMenuCallbacks* callbacks, int functionIndex ) : + JSObject(exec->lexicalInterpreter()->builtinObjectPrototype()), + m_callbacks( callbacks ), + m_functionId( abs( functionIndex ) ) +{ +} + +JSMenuFunc::~JSMenuFunc() +{ +} + +// ---------------------------------------------------------------------------- +// JSMenuFunc::implementsCall +// Whether or not the object implements the call() method +// +// +// ---------------------------------------------------------------------------- +bool JSMenuFunc::implementsCall() const +{ + return true; +} + + +// ---------------------------------------------------------------------------- +// JSMenuFunc::call +// Calls this object as if it is a function +// +// +// ---------------------------------------------------------------------------- +JSValue* JSMenuFunc::callAsFunction(ExecState *exec, JSObject *thisObj, const List &args) +{ + + JSMenu *thisItem = static_cast(thisObj); + + switch ( m_functionId) + { + case JSMenu::Append: + { + if ( args.size() > 0 && !args[0]->isNull() ) { + JSMenuItem* mitem = static_cast( args[0]->toObject(exec) ); + if ( mitem->type() == ObjectType && mitem->inherits(&JSMenuItem::info) ) { + mitem->AddOptionsMenuItem(true); + } + } + } + break; + case JSMenu::Remove: + { + if ( args.size() > 0 && !args[0]->isNull() ) { + JSMenuItem* mitem = static_cast( args[0]->toObject(exec) ); + if ( mitem->type() == ObjectType && mitem->inherits(&JSMenuItem::info) ) { + mitem->DeleteMenuItem(); + } + } + + } + break; + case JSMenu::GetMenuItemById: + { + if ( args.size() > 0 && !args[0]->isNull() ) { + + TInt cmdId = args[0]->toInt32( exec ); + JSMenuItem* mi = static_cast(m_callbacks->getFromMenuItemCollection( cmdId )); + + if ( !mi ) + return jsUndefined(); + + return mi; + } + } + break; + case JSMenu::GetMenuItemByName: + { + if ( args.size() > 0 && !args[0]->isNull() ) { + UString str = args[0]->toString( exec ); + TBuf textVal; + textVal.Copy( (const unsigned short*)( str.data() ),( str.size() > CEikAutoMenuTitle::ENominalTextLength ) ? CEikAutoMenuTitle::ENominalTextLength : str.size() ); + + JSMenuItem* mi = static_cast( m_callbacks->getFromMenuItemCollection( textVal )); + if ( !mi ) + return jsUndefined(); + + return mi; + } + + } + break; + case JSMenu::SetRightSoftKeyLabel: + { + if (args.size() > 1) { + TInt labelSize(0); + if (!args[0]->isNull() ) { + UString label = args[0]->toString( exec ); + labelSize = (label.size() < KMaxCbaLabelLength) ? label.size() : KMaxCbaLabelLength; + m_callbacks->setRightSoftKeyLabel(TPtrC((const unsigned short*)(label.data()), labelSize) ); + } + + JSValue* val = (!args[1]->isNull() && labelSize) ? args[1] : 0; + thisItem->setRightKeyCallback( exec, val ); + } + + } + break; + case JSMenu::SetLeftSoftKeyLabel: + { + if (args.size() > 1) { + TInt labelSize(0); + if (!args[0]->isNull() ) { + UString label = args[0]->toString( exec ); + labelSize = (label.size() < KMaxCbaLabelLength) ? label.size() : KMaxCbaLabelLength; + m_callbacks->setLeftSoftKeyLabel(TPtrC((const unsigned short*)(label.data()), labelSize) ); + } + + JSValue* val = (!args[1]->isNull() && labelSize) ? args[1] : 0; + thisItem->setLeftKeyCallback( exec, val ); + } + + } + break; + case JSMenu::Clear: + { + m_callbacks->clearMenuItems(); + } + break; + case JSMenu::ToString: + { + thisItem->toString( exec ); + } + break; + case JSMenu::HideSoftkeys: + { + m_callbacks->hideSoftkeys( ); + } + break; + case JSMenu::ShowSoftkeys: + { + m_callbacks->showSoftkeys( ); + } + break; + default: + break; + } + + return jsUndefined(); +} + + +