diff -r 000000000000 -r dd21522fd290 webengine/widgetengine/inc/MenuClient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/widgetengine/inc/MenuClient.h Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,141 @@ +/* +* 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 +* +*/ + +#ifndef __MENUCLIENT +#define __MENUCLIENT + +// INCLUDES +#include +#include +#include + +#include "BrCtlInterface.h" +#include "MenuCallbacks.h" +#include "MenuItemCallbacks.h" +#include "WidgetEngineCallbacks.h" + +// CONSTANTS + +// MACROS + +// DATA TYPES +enum TMenuItemState +{ + EReal=0, //in real tree + EVirtual, //in virtual tree + ERealOrVirtual //either real or virtual +}; + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATION + +// CLASS DECLARATION +class CMenuItem; + +namespace KJS { + class JSMenu; + class JSMenuItemConstructor; +} + + +/** +* CWidgetExtension +* +* @lib browserengine.dll +* @since 3.2 +*/ +class CMenuClient : public CBase, public MJSMenuCallbacks, public MJSMenuItemCallbacks +{ + +public: + static CMenuClient* NewL(MWidgetCallback& aWidgetCallback, MWidgetEngineCallbacks& aWidgetEngineCallback); + virtual ~CMenuClient(); + +public: + KJS::JSMenu* jsmenu(); + KJS::JSMenuItemConstructor* jsmenuitem(); + + void addOptionMenuItemsL( CEikMenuPane& aMenuPane,TInt aResourceId ); + void menuShowed(); + void menuItemSelected( TInt aInternalId ); + + +public: // From MWidgetExtension + TBool HandleCommandL( TInt aCommandId ); + +public: //From MJSMenuCallbacks + void* getFromMenuItemCollection( TInt aCmdId ); + void* getFromMenuItemCollection( const TDesC& aTextVal ); + void hideSoftkeys(); + void showSoftkeys(); + void setRightSoftKeyLabel( const TDesC& aText ); + void setLeftSoftKeyLabel( const TDesC& aText ); + void clearMenuItems(); + +public://From MJSMenuItemCallbacks + TInt createOptionsMenuItem( const TDesC& aText, TInt aCmdId, TInt aInternalId, void* aObj ); + TInt addOptionsMenuItem( TInt aInternalId, TInt aParentInternalId, TBool aShow=ETrue ); + void deleteMenuItem( TInt aInternalId ); + void setDimmed( TInt aInternalId, TBool aValue ); + KJS::WidgetEventHandler* menuItemObserver( TInt aInternalId, TInt& aCmdId ); + void setMenuItemObserver( TInt aInternalId, KJS::WidgetEventHandler* aOnSelectCallback ); + +private: + void deleteTree( CMenuItem* aNode ); + void insertTree( CMenuItem* aParent, CMenuItem* aItem ); + void rearrangeTree( CMenuItem* aParent, CMenuItem* aItem, TBool aShow ); + void showTree( CMenuItem* aNode, TBool aShow ); + void deleteItem( CMenuItem* aItem ); + void deleteSibling( CMenuItem* aRoot, CMenuItem* aItem ); + +private: + void addMenuItem( CEikMenuPane& aMenuPane, CMenuItem* aNode , TInt aIsRootMenuPane = EFalse); + TInt append( CMenuItem* root, CMenuItem* item ); + void appendSibling( CMenuItem* root, CMenuItem* item ); + CMenuItem* findNodeById( CMenuItem* node, TInt aInternalId, TMenuItemState aState ); + TBool isDuplicate( CMenuItem* node ); + CMenuItem* findNodeByCmdId( CMenuItem* node, TInt aCmdId ); + CMenuItem* findNodeByText( CMenuItem* node, const TDesC& aText ); + +private: + CMenuClient(MWidgetCallback& aWidgetCallback, MWidgetEngineCallbacks& aWidgetEngineCallback); + void ConstructL(); + +private: + + struct TCascadeIDMap + { + TInt iResourceId; + TInt parentInternalId; + }; + + RArray iCascadeArr; + TInt iResourceId; + CMenuItem* iMenuRoot; + +private: + MWidgetCallback* iWidgetCallback; + MWidgetEngineCallbacks* m_widgetenginecallback; + + KJS::JSMenu* m_jsmenu; + KJS::JSMenuItemConstructor* m_jsmenuitemctr; + +}; + + +#endif