williamr@2: // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef __COEMAIN_H__ williamr@2: #define __COEMAIN_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@4: williamr@2: #if defined(USE_IH_RAISE_EVENT) williamr@2: #include williamr@2: #include williamr@2: #endif williamr@2: williamr@2: class CVwsSessionWrapper; williamr@2: class MVwsSessionWrapperObserver; williamr@2: class TCoeInputCapabilities; // forward declaration of class defined in COEINPUT.H williamr@2: class CCoeAppUi; williamr@2: class CCoeEnv; williamr@2: class TResourceReader; williamr@2: class RGenericPointerArray; williamr@2: class CCoeFep; // must derive from CBase williamr@2: class CCoeFontProvider; williamr@2: class CCoeEnvExtra; williamr@2: class CCoeStatic; williamr@2: williamr@4: #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: #include williamr@4: #endif //SYMBIAN_ENABLE_SPLIT_HEADERS williamr@2: williamr@2: /** UI Control framework active object priorities. williamr@2: These are in addition to the values contained in the TPriority enum in class CActive. williamr@2: williamr@2: @publishedAll williamr@2: @released */ williamr@2: enum TActivePriority williamr@2: { williamr@2: /** 300 */ williamr@2: EActivePriorityClockTimer=300, williamr@2: /** 200 */ williamr@2: EActivePriorityIpcEventsHigh=200, williamr@2: /** 150 */ williamr@2: EActivePriorityFepLoader=150, williamr@2: /** 100 */ williamr@2: EActivePriorityWsEvents=100, williamr@2: /** 50 */ williamr@2: EActivePriorityRedrawEvents=50, williamr@2: /** 0 */ williamr@2: EActivePriorityDefault=0, williamr@2: /** 10 */ williamr@2: EActivePriorityLogonA=-10 williamr@2: }; williamr@2: williamr@2: williamr@2: /** Interface providing notification when there is a change in the currently williamr@2: loaded FEP. williamr@2: williamr@2: This happens either on application start-up, or as a result of a different williamr@2: front end processor having been installed. williamr@2: williamr@2: Anyone requiring this notification should derive from this class and implement williamr@2: its pure virtual function. Derived classes also need to call CCoeEnv::AddObserverOfLoadedFepL() williamr@2: during construction, and CCoeEnv::RemoveObserverOfLoadedFep() in their destructor. williamr@2: williamr@2: @publishedAll williamr@2: @released */ williamr@2: class MCoeObserverOfLoadedFep williamr@2: { williamr@2: public: williamr@2: /** Handles a change in the loaded FEP. williamr@2: williamr@2: The function is called if a new FEP is loaded, or if the current one is unloaded. */ williamr@2: virtual void HandleChangeInLoadedFep()=0; williamr@2: protected: williamr@2: IMPORT_C MCoeObserverOfLoadedFep(); williamr@2: williamr@2: private: williamr@2: IMPORT_C virtual void MCoeObserverOfLoadedFep_Reserved_1(); williamr@2: IMPORT_C virtual void MCoeObserverOfLoadedFep_Reserved_2(); williamr@2: private: williamr@2: TInt iMCoeObserverOfLoadedFep_Reserved1; williamr@2: }; williamr@2: williamr@2: williamr@2: /** Interface providing notification if any control gains or loses focus or is williamr@2: destroyed. williamr@2: williamr@2: The FEP framework uses this class to observe when a target control changes williamr@2: for reasons unrelated to the FEP. williamr@2: williamr@2: Anything that needs such notification should derive from this class and implement williamr@2: its two pure virtual functions. williamr@2: williamr@2: In addition, derived classes need to call CCoeEnv::AddFocusObserverL() during williamr@2: construction, and CCoeEnv::RemoveFocusObserver() in their destructors. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: @see CCoeFep */ williamr@2: class MCoeFocusObserver williamr@2: { williamr@2: public: williamr@2: /** Handles changes in focus. The function is called if any control gains or loses williamr@2: focus. */ williamr@2: virtual void HandleChangeInFocus()=0; williamr@2: /** Handles the destruction of any control. It is called by the framework if any williamr@2: control is destroyed. */ williamr@2: virtual void HandleDestructionOfFocusedItem()=0; williamr@2: protected: williamr@2: IMPORT_C MCoeFocusObserver(); williamr@2: private: williamr@2: IMPORT_C virtual void MCoeFocusObserver_Reserved_1(); williamr@2: IMPORT_C virtual void MCoeFocusObserver_Reserved_2(); williamr@2: private: williamr@2: TInt iMCoeFocusObserver_Reserved1; williamr@2: }; williamr@2: williamr@2: /** An interface which enables message windows to observe resource changes. williamr@2: williamr@2: Resource change observers should be added to the control environment using williamr@2: CCoeEnv::AddResourceChangeObserverL(). williamr@2: williamr@2: @publishedAll williamr@2: @released */ williamr@2: class MCoeResourceChangeObserver williamr@2: { williamr@2: public: williamr@2: /** Handles a change to the application's resources. */ williamr@2: virtual void HandleResourceChange()=0; williamr@2: protected: williamr@2: IMPORT_C MCoeResourceChangeObserver(); williamr@2: private: williamr@2: IMPORT_C virtual void MCoeResourceChangeObserver_Reserved_1(); williamr@2: IMPORT_C virtual void MCoeResourceChangeObserver_Reserved_2(); williamr@2: private: williamr@2: TInt iMCoeResourceChangeObserver_Reserved1; williamr@2: }; williamr@2: williamr@2: /** Interface providing notification of foreground/background changes. williamr@2: williamr@2: The FEP framework class, CCoeFep, derives from MCoeForegroundObserver, which williamr@2: enables FEPs to receive notification when the target application (which receives williamr@2: the FEP's output) goes into the foreground or background. williamr@2: williamr@2: Anything that needs this notification should derive from this class and override williamr@2: its two pure virtual functions. williamr@2: williamr@2: In addition, derived classes also need to call CCoeEnv::AddForegroundObserverL() williamr@2: during construction, and CCoeEnv::RemoveForegroundObserver() in their destructors. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: @see CCoeFep */ williamr@2: class MCoeForegroundObserver williamr@2: { williamr@2: public: williamr@2: /** Handles the application coming to the foreground. */ williamr@2: virtual void HandleGainingForeground()=0; williamr@2: /** Handles the application going into the background. */ williamr@2: virtual void HandleLosingForeground()=0; williamr@2: protected: williamr@2: IMPORT_C MCoeForegroundObserver(); williamr@2: private: williamr@2: IMPORT_C virtual void MCoeForegroundObserver_Reserved_1(); williamr@2: IMPORT_C virtual void MCoeForegroundObserver_Reserved_2(); williamr@2: private: williamr@2: TInt iMCoeForegroundObserver_Reserved1; williamr@2: }; williamr@2: williamr@2: williamr@2: /** Interface for handling incoming window server messages. williamr@2: williamr@2: This interface is used to enable FEPs to keep their settings synchronised williamr@2: across all running instances. williamr@2: williamr@2: Anything that needs to be notified of messages that get sent by the window server's williamr@2: message-sending service should derive from this class and override its pure williamr@2: virtual function. williamr@2: williamr@2: In addition, derived classes also need to call CCoeEnv::AddMessageObserverL() williamr@2: during construction and CCoeEnv::RemoveMessageObserver() in their destructors. williamr@2: williamr@2: @publishedAll williamr@2: @released */ williamr@2: class MCoeMessageObserver williamr@2: { williamr@2: public: williamr@2: /** Message response flags. */ williamr@2: enum TMessageResponse williamr@2: { williamr@2: /** Message not handled. */ williamr@2: EMessageNotHandled, williamr@2: /** Message handled. */ williamr@2: EMessageHandled williamr@2: }; williamr@2: public: williamr@2: /** Handles window server messages. williamr@2: williamr@2: Implementations should return EMessageHandled if they are able to handle the williamr@2: message, or EMessageNotHandled if the message is not appropriate to this observer. williamr@2: williamr@2: @param aClientHandleOfTargetWindowGroup The window group that the message williamr@2: was sent to. Many implementations will not need this information. williamr@2: @param aMessageUid The message UID. williamr@2: @param aMessageParameters The message parameters. williamr@2: @return Indicates whether the message was handled or not handled williamr@2: by the function. */ williamr@2: virtual TMessageResponse HandleMessageL(TUint32 aClientHandleOfTargetWindowGroup, TUid aMessageUid, const TDesC8& aMessageParameters)=0; williamr@2: protected: williamr@2: IMPORT_C MCoeMessageObserver(); williamr@2: private: williamr@2: IMPORT_C virtual void MCoeMessageObserver_Reserved_1(); williamr@2: IMPORT_C virtual void MCoeMessageObserver_Reserved_2(); williamr@2: }; williamr@2: williamr@2: /** Mix-in interface for handling window visibility messages. williamr@2: williamr@2: @publishedAll williamr@2: @released */ williamr@2: class MCoeMessageMonitorObserver williamr@2: { williamr@2: public: williamr@2: /** Received windows messages for monitoring. williamr@2: @param aEvent The windows server event data.*/ williamr@2: virtual void MonitorWsMessage(const TWsEvent& aEvent)=0; williamr@2: private: williamr@2: IMPORT_C virtual void MCoeMessageMonitorObserver_Reserved_1(); williamr@2: IMPORT_C virtual void MCoeMessageMonitorObserver_Reserved_2(); williamr@2: }; williamr@2: williamr@2: // classes defined in FEPBASE, declared here williamr@2: class MCoeFepObserver; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef void (*TCoeFepObserverFunction)(MCoeFepObserver& aFepObserver); williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CCoeFepParameters : public CBase williamr@2: { williamr@2: public: williamr@2: static CCoeFepParameters* NewLC(); williamr@2: private: williamr@2: inline CCoeFepParameters() {} williamr@2: }; williamr@2: williamr@2: williamr@2: /** Control environment. williamr@2: williamr@2: CCoeEnv provides an active environment for creating controls. It implements williamr@2: active objects and an active scheduler, which provide access to the window williamr@2: server, simplifying the API for application programs. It also provides utility williamr@2: functions that are useful to many applications. williamr@2: williamr@2: When a standard event occurs, the active scheduler calls CCoeEnv::RunL(). williamr@2: When a redraw event occurs, it calls CCoeRedrawer::RunL(). Priority key events williamr@2: must be accessed using the Window Server API directly. williamr@2: williamr@2: Note: standard events are all events except redraw events and priority key events. williamr@2: williamr@2: @publishedAll williamr@2: @released */ williamr@2: class CCoeEnv : public CActive, public MObjectProvider williamr@2: { williamr@2: public: williamr@2: // Properties williamr@2: IMPORT_C static TVersion Version(); williamr@2: IMPORT_C static CCoeEnv* Static(); williamr@2: // Construction and destruction williamr@2: IMPORT_C CCoeEnv(); williamr@2: IMPORT_C ~CCoeEnv(); williamr@2: IMPORT_C void ConstructL(); williamr@2: IMPORT_C void ConstructL(TBool aInitialFocusState); williamr@2: IMPORT_C void ConstructL(TBool aInitialFocusState, TInt aDefaultScreenNumber); williamr@2: IMPORT_C void ConstructL(TBool aInitialFocusState, TInt aDefaultScreenNumber, TInt aWindowGroupID); williamr@2: IMPORT_C CCoeAppUi* SetAppUi(CCoeAppUi* aAppUi); williamr@2: IMPORT_C void ExecuteD(); williamr@2: IMPORT_C void Execute(); williamr@2: IMPORT_C void RunL(); williamr@2: IMPORT_C void DoCancel(); williamr@2: IMPORT_C void PrepareToExit(); williamr@2: IMPORT_C virtual void DestroyEnvironment(); williamr@2: IMPORT_C void DisableExitChecks(TBool aDisable); williamr@2: IMPORT_C virtual void HandleError(TInt aError); williamr@2: // System resources williamr@2: inline CCoeAppUi* AppUi() const; williamr@2: inline RFs& FsSession() const; williamr@2: inline RWsSession& WsSession() const; williamr@2: inline RWindowGroup& RootWin() const; williamr@2: inline CWsScreenDevice* ScreenDevice() const; williamr@2: inline CWindowGc& SystemGc() const; williamr@2: inline const CFont* NormalFont() const; williamr@2: inline const TWsEvent& LastEvent() const; williamr@2: inline TBool IsSchedulerRunning() const; williamr@2: // Graphics williamr@2: IMPORT_C CWindowGc* CreateGcL(); williamr@2: IMPORT_C CWindowGc* SwapSystemGc(CWindowGc* aGc); williamr@2: IMPORT_C void Flush(TTimeIntervalMicroSeconds32 aDelay=0); williamr@2: IMPORT_C void SuppressNextFlush(); williamr@2: IMPORT_C TBool IsWservEventPending() const; williamr@2: IMPORT_C TBool IsRedrawEventPending() const; williamr@4: // Fonts williamr@2: IMPORT_C CFbsFont* CreateDeviceFontL(CGraphicsDevice* aDevice,const TFontSpec& aFontSpec); williamr@2: IMPORT_C CFbsFont* CreateScreenFontL(const TFontSpec& aFontSpec); williamr@2: IMPORT_C void ReleaseScreenFont(CFont* aFont) const; williamr@2: // Font provider williamr@2: IMPORT_C const CCoeFontProvider& DefaultFontProvider() const; williamr@2: // Text drawer williamr@2: IMPORT_C CCoeTextDrawerBase& DefaultTextDrawer() const; williamr@2: // Zooming williamr@2: IMPORT_C TZoomFactor ZoomFactor() const; williamr@2: IMPORT_C void SetZoomFactor(const TZoomFactor& aZoomFactor); williamr@2: // Resource reading williamr@2: IMPORT_C TInt AddResourceFileL(const TDesC& aFileName); williamr@2: IMPORT_C void DeleteResourceFile(TInt aOffset); williamr@2: IMPORT_C TBool IsResourceAvailableL(TInt aResourceId) const; williamr@2: IMPORT_C void CreateResourceReaderLC(TResourceReader& aReader,TInt aResourceId) const; williamr@2: inline void ReadResource(TDes& aDes,TInt aResourceId) const; williamr@2: inline void ReadResourceL(TDes& aDes,TInt aResourceId) const; williamr@2: inline HBufC* AllocReadResourceL(TInt aResourceId) const; williamr@2: inline HBufC* AllocReadResourceLC(TInt aResourceId) const; williamr@2: inline CDesCArrayFlat* ReadDesCArrayResourceL(TInt aResourceId); williamr@2: IMPORT_C void ReadResourceAsDes8(TDes8& aDes,TInt aResourceId) const; /** @deprecated 7.0*/ williamr@2: IMPORT_C void ReadResourceAsDes8L(TDes8& aDes,TInt aResourceId) const; williamr@2: IMPORT_C HBufC8* AllocReadResourceAsDes8L(TInt aResourceId) const; williamr@2: IMPORT_C HBufC8* AllocReadResourceAsDes8LC(TInt aResourceId) const; williamr@2: IMPORT_C CDesC8ArrayFlat* ReadDesC8ArrayResourceL(TInt aResourceId); williamr@2: IMPORT_C void ReadResourceAsDes16(TDes16& aDes,TInt aResourceId) const; /** @deprecated 7.0*/ williamr@2: IMPORT_C void ReadResourceAsDes16L(TDes16& aDes,TInt aResourceId) const; williamr@2: IMPORT_C HBufC16* AllocReadResourceAsDes16L(TInt aResourceId) const; williamr@2: IMPORT_C HBufC16* AllocReadResourceAsDes16LC(TInt aResourceId) const; williamr@2: IMPORT_C CDesC16ArrayFlat* ReadDesC16ArrayResourceL(TInt aResourceId); williamr@2: IMPORT_C void Format128(TDes& aDes,TInt aResourceId,...); williamr@2: IMPORT_C void Format256(TDes& aDes,TInt aResourceId,...); williamr@2: // Error handling williamr@2: IMPORT_C void LeaveWithErrorText(const TDesC& aMsg,const TDesC* aContextText=NULL); williamr@2: // Key handling williamr@2: IMPORT_C void SimulateKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); williamr@2: // FEP handling williamr@2: IMPORT_C void AddObserverOfLoadedFepL(MCoeObserverOfLoadedFep& aObserverOfLoadedFep); williamr@2: IMPORT_C void RemoveObserverOfLoadedFep(MCoeObserverOfLoadedFep& aObserverOfLoadedFep); williamr@2: IMPORT_C void AddFepObserverL(MCoeFepObserver& aFepObserver); williamr@2: IMPORT_C void RemoveFepObserver(MCoeFepObserver& aFepObserver); williamr@2: IMPORT_C void ForEachFepObserverCall(TCoeFepObserverFunction aFepObserverFunction); williamr@2: void EnsureCorrectFepIsLoadedL(); williamr@2: void EnsureSpecifiedFepIsLoadedL(TUid aFepUid); williamr@2: IMPORT_C void InstallFepL(TUid aFepUid); williamr@2: IMPORT_C void InstallFepL(TUid aFepUid, const TBool aLeave); williamr@2: IMPORT_C void AvailableFepsL(RArray& aUids, CDesCArray* aDisplayNames); williamr@2: IMPORT_C void ExecuteFepSettingsDialogL(TUid aFepUid); williamr@2: IMPORT_C CCoeFep* Fep() const; williamr@2: IMPORT_C TUid FepUid() const; williamr@2: IMPORT_C void InputCapabilitiesChanged(); williamr@2: // Control focus handling williamr@2: IMPORT_C void AddFocusObserverL(MCoeFocusObserver& aFocusObserver); williamr@2: IMPORT_C void RemoveFocusObserver(MCoeFocusObserver& aFocusObserver); williamr@2: IMPORT_C void SyncNotifyFocusObserversOfChangeInFocus(); williamr@2: void NotifyFocusObserversOfDestructionOfFocusedItem(); williamr@2: // Application focus (foreground) handling williamr@2: IMPORT_C void BringOwnerToFront(); williamr@2: IMPORT_C void AddForegroundObserverL(MCoeForegroundObserver& aForegroundObserver); williamr@2: IMPORT_C void RemoveForegroundObserver(MCoeForegroundObserver& aForegroundObserver); williamr@2: void NotifyForegroundObserversOfGainingForeground(); williamr@2: void NotifyForegroundObserversOfLosingForeground(); williamr@2: // Resource change handling williamr@2: IMPORT_C void AddResourceChangeObserverL(MCoeResourceChangeObserver& aResourceChangeObserver); williamr@2: IMPORT_C void RemoveResourceChangeObserver(MCoeResourceChangeObserver& aResourceChangeObserver); williamr@2: void NotifyResourceObserversOfChangeInResource(); williamr@2: // Window server message handling williamr@2: IMPORT_C void AddMessageObserverL(MCoeMessageObserver& aMessageObserver); williamr@2: IMPORT_C void RemoveMessageObserver(MCoeMessageObserver& aMessageObserver); williamr@2: IMPORT_C void AddMessageMonitorObserverL(MCoeMessageMonitorObserver& aMessageMonitorObserver); williamr@2: IMPORT_C void RemoveMessageMonitorObserver(MCoeMessageMonitorObserver& aMessageMonitorObserver); williamr@2: void NotifyMessageMonitorObserversOfEvent(const TWsEvent& aEvent); williamr@2: // Singleton access williamr@2: IMPORT_C static CCoeStatic* Static(TUid aUid); williamr@2: IMPORT_C CCoeStatic* FindStatic(TUid aUid); williamr@2: //multiple screens williamr@2: IMPORT_C CWsScreenDevice* ScreenDevice(TInt aScreenNumber) const; williamr@2: IMPORT_C RWindowGroup* RootWin(TInt aScreenNumber) const; williamr@2: public: // *** Do not use! API liable to change *** williamr@2: TInt AppStartupInstrumentationEventIdBase(); williamr@2: public: // Internal to Symbian williamr@2: IMPORT_C void GetMessageNotifyingObserversLC(TUint32 aClientHandleOfTargetWindowGroup, TUid& aMessageUid, TPtr8& aMessageParameters, const TWsEvent& aMessageEvent); williamr@2: IMPORT_C TBool DisableShutdownChecks() const; williamr@2: protected: // Internal to Symbian williamr@2: IMPORT_C void SetAppStartupInstrumentationEventIdBaseL(TInt aAppStartupInstrumentationEventIdBase); williamr@2: IMPORT_C void DestroyEnvironmentStatic(); williamr@2: IMPORT_C void DestroyEnvironmentEnd(); williamr@2: IMPORT_C TInt CoeEnvConstructorError() const; williamr@2: private: // reserved virtual function space williamr@2: IMPORT_C virtual void Reserved_1(); williamr@2: IMPORT_C virtual void Reserved_2(); williamr@2: private: // from CActive williamr@2: IMPORT_C TInt RunError(TInt aError); williamr@2: protected: // from MObjectProvider williamr@2: IMPORT_C TTypeUid::Ptr MopSupplyObject(TTypeUid aId); williamr@2: protected: williamr@2: IMPORT_C virtual void DestroyScreen(); williamr@2: inline TDes& ErrorText(); williamr@2: inline TDes& ErrorContextText(); williamr@2: public: // but not exported williamr@4: void DoFlush(); williamr@2: CVwsSessionWrapper* InitViewServerSessionL(MVwsSessionWrapperObserver& aObserver); williamr@2: void AddStatic(CCoeStatic* aStatic); williamr@2: void QueueNotificationToFocusObserversOfChangeInFocus(); williamr@2: TInt FocusObserverNotificationIdentifier() const; williamr@2: TBool FocusObserverNotificationIsStillPending(TInt aFocusObserverNotificationIdentifier) const; williamr@2: void RefetchPixelMappingL(); williamr@2: TBool ControlStateChange(); williamr@4: TInt SupportedPointers() const; williamr@2: private: williamr@4: void RequestEventNotification(); williamr@2: void CreateActiveSchedulerL(); williamr@2: void ConnectToFileServerL(); williamr@2: void ConnectToWindowServerL(); williamr@2: void InitScreenL( TInt aDefaultScreenNumber ); williamr@2: void InitRootWindowL(TBool aInitialFocusState, TInt aWindowGroupID=0); williamr@2: void InitSystemGcL(); williamr@2: IMPORT_C virtual void InitSystemFontsL(); williamr@2: IMPORT_C virtual TInt ResourceFileVersionNumber() const; williamr@2: RResourceFile& ResourceFileForId(TInt aResourceId) const; williamr@2: void DestroyAllResourceFiles(); williamr@2: void AddObserverL(TAny* aObserver, RGenericPointerArray& aArray); williamr@2: void RemoveObserver(TAny* aObserver, RGenericPointerArray& aArray); williamr@2: void UpdateStatic(CCoeAppUi* aNewAppUi); williamr@2: void SetInitialHandleCount(); williamr@2: TUint InitialHandleCount() const; williamr@2: RResourceFile* DoResourceFileForIdL(TInt aResourceId) const; williamr@2: void PopulateArrayOfScreenItemsL(); williamr@2: void DeleteArrayOfScreensItems(); williamr@2: protected: williamr@2: CCoeAppUi* iAppUi; williamr@2: RFs iFsSession; williamr@2: RWsSession iWsSession; williamr@2: RWindowGroup iRootWin; williamr@2: CWindowGc* iSystemGc; williamr@2: const CFont* iNormalFont; williamr@2: CWsScreenDevice* iScreen; williamr@2: TWsEvent iLastEvent; williamr@2: CArrayFix* iResourceFileArray; williamr@2: private: williamr@2: enum TFlags // used in the bottom 16 bits only of iEnvFlags williamr@2: { williamr@2: ENoShutdownChecks =0x0001, williamr@2: EExtraPointerIsErrorCode =0x0002, williamr@2: ESchedulerIsRunning =0x0004 williamr@2: }; williamr@2: private: williamr@2: TDes* iErrorText; williamr@2: TDes* iErrorContextText; williamr@2: CCoeEnvExtra* iExtra; williamr@2: CTrapCleanup* iCleanup; williamr@2: TUint iEnvFlags; williamr@2: }; williamr@2: williamr@2: /** Base class for creating singleton objects that will be stored by CCoeEnv. williamr@2: williamr@2: Each object must have a unique TUid. williamr@2: williamr@2: Symbian OS does not provide writeable global static data. Singleton objects williamr@2: provide its equivalent in thread local storage, which is supported. williamr@2: williamr@2: This behaviour is useful for objects in which only one copy is ever needed williamr@2: in the thread or application, e.g. in alert windows. williamr@2: williamr@2: @publishedAll williamr@2: @released */ williamr@2: class CCoeStatic : public CBase williamr@2: { williamr@2: public: williamr@2: /** Scope of access to the singleton object. */ williamr@2: enum TScope williamr@2: { williamr@2: /** Access from the entire thread. */ williamr@2: EThread, williamr@2: /** Access from an appUi in that thread. */ williamr@2: EApp, williamr@2: }; williamr@2: /** The default destruction priority if none is specified in the constructor */ williamr@2: enum {EDefaultDestructionPriority=100}; williamr@2: public: williamr@2: IMPORT_C ~CCoeStatic(); williamr@2: protected: williamr@2: IMPORT_C CCoeStatic(); williamr@2: IMPORT_C CCoeStatic(TUid aUid,TScope=EThread); williamr@2: IMPORT_C CCoeStatic(TUid aUid,TInt aDestructionPriority,TScope aScope=EThread); williamr@2: private: williamr@2: IMPORT_C virtual void CCoeStatic_Reserved1(); williamr@2: IMPORT_C virtual void CCoeStatic_Reserved2(); williamr@2: private: williamr@2: void DoConstruction(const TUid& aUid,TInt aDestructionPriority,TScope aScope); williamr@2: void SetCsAppUi(CCoeAppUi* aAppUi); williamr@2: CCoeAppUi* CsAppUi() const; williamr@2: TScope CsScope() const; williamr@2: inline TInt DestructionPriority() const {return iCsLink.iPriority;} williamr@2: private: williamr@2: TPriQueLink iCsLink; williamr@2: TUid iCsUid; williamr@2: TUint iCsAppUiAndScope; williamr@2: TInt iCCoeStatic_Reserved1; williamr@2: private: williamr@2: friend class CCoeEnv; williamr@2: friend class CCoeEnvExtra; williamr@2: }; williamr@2: williamr@2: #include williamr@2: williamr@2: #endif // __COEMAIN_H__