diff -r 000000000000 -r 79c6a41cd166 menucontentsrv/srvinc/menusrveng.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/menucontentsrv/srvinc/menusrveng.h Thu Dec 17 08:54:17 2009 +0200 @@ -0,0 +1,303 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: +* +*/ + +#ifndef __MENUSRVENG_H__ +#define __MENUSRVENG_H__ + +// INCLUDES + +#include +#include "menuengobserver.h" +#include "menuengobject.h" +#include "menusrvengutils.h" +#include "menusrvattr.h" +// FORWARD DECLARATION + +class CMenuEng; +class CMenuSrv; +class CMenuSrvSession; +class CTimeout; +class CMenuSrvAppScanner; +class CMenuSrvFolderCrNotifier; +class CMcsSatMonitor; +class CMcsDrmHandler; +class CMcsCacheHandler; +class CMcsChildrenHandler; +class CMcsRunningAppsHandler; +class CMcsSuiteHandler; +class CMcsGetlistHandler; +/** +* In release code the macro must be undefined and application +* scanning must be enabled! +* Define the macro only for testing purposes! +*/ +#undef __TEST_DISABLE_APPSCAN + +// GLOBAL FUNCTIONS + +/** +* Menu engine instance. +* Shared by the sessions using the same content file. +* It is also "shared" by its own iTimedClose timer. The timer keeps this +* object alive without any sessions, for a short time. +* It is a reference counting object, but that is only used for sanity +* checking: this->CObject::iAccessCount == iSessions.Count() + 1. +*/ +NONSHARABLE_CLASS( CMenuSrvEng ) : public CObject, public MMenuEngObserver + { +public: + enum TExtendedAttributes + { + EMenuAttrTitleName, + EMenuAttrShortName, + EMenuAttrLongName, + EMenuAttrIconFile, + EMenuAttrIconId, + EMenuAttrMaskId + }; + +public: // construction + + /** + * Destructor. + */ + virtual ~CMenuSrvEng(); + + /** + * Two-phased constructor. Leaves on failure. + * @param aMenuSrv Menu Server. + * @param aContentName Content file name. + * @return The constructed object. + */ + static CMenuSrvEng* NewL( CMenuSrv& aMenuSrv, const TDesC& aContentName ); + +private: // construction + + /** + * Constructor. + * @param aMenuSrv Menu Server. + */ + CMenuSrvEng( CMenuSrv& aMenuSrv ); + + /** + * Second-phase constructor. + * @param aContentName Content file name. + */ + void ConstructL( const TDesC& aContentName ); + +public: // new methods + + /** + * Get content file name (without extension). + * @return Content file name. + */ + const TDesC& ContentName() const { return iContentName; } + + /** + * Get the Engine. + * @return Engine. + */ + CMenuEng& Engine() { return *iEng; } + + /** + * Add a session. Ownership not taken, this object only keeps a list of + * sessions that are dependent on its engine. + * @param aSession Session. + */ + void AddSessionL( CMenuSrvSession* aSession ); + + /** + * Remove a session. Safe to call if not added. + * When no more sessions remain dependent on this object, timed + * self-deletion is scheduled. + */ + void RemoveSession( CMenuSrvSession* aSession ); + + + /** + * Get attribute name list. + * @since S60 v5.0 + * @param aList Attribute name list. + * @throws System-wide error codes if an error occurs. + * @panic None. + * + */ + void GetAttributeListL( + TInt aId, + RArray& aList ); + + /** + * Get attribute value. + * @since S60 v5.0 + * @param aAttrName Attribute name. + * @param aAttrExists Will be set to indicate whether attribute exists + * or not. + * @return Attribute value. Empty string if attribute does not exist. + */ + TPtrC GetAttributeL( TInt aId, const TDesC& aAttrName, TBool& aAttrExists ); + + void GetAttributeL( TInt aId, const TDesC& aAttrName, + TBool& aAttrExists, TDes& aAttrVal ); + + //TODO: Add comment + TBool InstalledSuiteExist( const TDesC& aSuiteName ); + + //TODO: Add comment + void GetSuiteAttribute( const TDesC& aSuiteName, const TDesC& aAttrName, + TBool& aAttrExists, TDes& aAttrVal ); + + /** + * Get array of running apps + * + */ + void GetRunningAppsL( RArray& aArray ); + + + /** + * Fetches children count for a folder + */ + TUint GetChildrenCountL( TInt aId ); + + /** + * Builds output list for GetList operation and returns result + * @param aSerializedInput serialized list with input parameters + * for GetList operation + * @return size of output list + */ + TInt GetListSizeL( const TDesC8& aSerializedInput ); + + /** + * Returns serialized list containing result of GetList oepration + * @return serialized output list + */ + TPtrC8 GetListDataL( ); + + /** + * Closes output buffer. + */ + void CloseOutputBuffer( ); + + /** + * Cleans attribute cache. Used in case of no memory. + */ + void CleanAttributeCache( ); + +private: // from MMenuEngObserver + + + void GetExtendedAttributesL( TInt aId, const TDesC& aAttrName, + TBool& aAttrExists, TDes& aAttrVal ); + + void AddToCacheL( TInt aId, const TDesC& aAttrName, TDes& aAttrVal ); + + + /** + * Fetches an application native attribute value. + * @param aId item id. + * @param aAttrExists ETrue if attribute exist. + * @param aAttrVal attribute value. + */ + void ApplicationNativeAttributeL( + TInt aId, + TBool & aAttrExists, + TDes & aAttrVal ); + + /** + * Engine event. Dispatch events to all dependent sessions. + * @param aFolder Events relate to this folder. May be 0. + * @param aEvents Events. + */ + void EngineEvents( TInt aFolder, TInt aEvents ); + + /** + * Unrecoverable engine error. Dispatch to all dependent sessions. + * @param aErr Error code. + */ + void EngineError( TInt aErr ); + + /** + * Engine tree reload event. + * Run appscanner again. + */ + void EngineTreeReloaded(); + /** + * Fetches an attribute value from the caption info attributes + */ + void CaptionInfoL( TInt aId, const TDesC& aAttrName, + TBool& aExists, TDes& aAttrVal ); + + + /** + * Fetches an attribute value from the skin icon info attributes + */ + void SkinInfoL( TInt aId, TInt aSelect, TBool& aExists, TDes& aAttrVal ); + + /** + * Fetches the DRM protection attribute value + */ + void AppDrmProtectionL( TInt aId, TBool& aExists, TDes& aAttrVal ); + + /** + * Fetches an attribute value from the caption info attributes for application + */ + TPtrC AppCaptionInfoL( const CMenuEngObject& aEngObj, + const TDesC& aAttrName, TBool& aExists ); + + /** + * Fetches the children_count attribute value (for folders) + */ + void FolderChildrenCountL( TInt aId, TBool& aExists, TDes& aAttrVal ); + + /** + * Fetches the running status for application and folder + */ + void GetAppRunningL( TInt aId, TBool& aExists, TDes& aAttrVal ); + + /** + * Appends extended attributes to attributes list + */ + void AppendExtendedAttrributesL( + const TDesC& aType, + RArray& aList ); + + +private: // Data + + CMenuSrv& iMenuSrv; ///< Menu Server. + RBuf iContentName; ///< Content name. Own. + RPointerArray iSessions; ///< Sessions using this engine. + CMenuEng* iEng; ///< Engine. Own. + CTimeout* iTimedClose; ///< Closing timer. Closes this object. + CMenuSrvAppScanner* iAppScanner; ///< App scanner. Own. + CMenuSrvFolderCrNotifier* iFolderNotifier; ///< Folder scanner. Own. + CMenuSrvEngUtils* iCMenuSrvEngUtils;///CMenuSrvEngUtils. Own. + CMcsSatMonitor* iMcsSatMonitor; + CMcsDrmHandler* iDrmHander; + CMcsRunningAppsHandler* iRunningAppsHandler;//own + CMcsCacheHandler* iCacheHandler; + CMcsChildrenHandler* iChildrenHandler; + CMcsSuiteHandler* iSuiteHandler; + CMcsGetlistHandler* iGetlistHandler; + }; + +#ifdef __TEST_DISABLE_APPSCAN +#pragma message("Undefine __TEST_DISABLE_APPSCAN !") +#endif + +#endif // __MENUSRVENG_H__ + +// End of File