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@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.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 __EIKAPPUI_H__ williamr@2: #define __EIKAPPUI_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: #include williamr@2: #include williamr@2: williamr@2: class CEikDocument; williamr@2: class CEikApplication; williamr@2: class CEikAppUiExtra; williamr@2: class MApaEmbeddedDocObserver; williamr@2: struct SExtendedError; williamr@2: class CApaCommandLine; williamr@2: williamr@2: /** Handles application-wide aspects of the application's user interface such williamr@2: as the menu bar, toolbar pop-up menus, opening and closing files and exiting the williamr@2: application cleanly. williamr@2: williamr@2: Every GUI application should use its own class derived from CEikAppUi. williamr@2: williamr@2: An app UI's main role is to handle commands, in its HandleCommandL() function. williamr@2: These may be invoked using the menu bar, toolbar, or hotkeys; the commands williamr@2: that an app UI handles are specified in the application's resource file. williamr@2: williamr@2: In addition, the app UI normally needs to respond to other kinds of events, by williamr@2: providing suitable implementations of the following virtual functions, all williamr@2: inherited from CCoeAppUi: williamr@2: williamr@2: - HandleKeyEventL(): Key events. williamr@2: williamr@2: - HandleForegroundEventL(): Application switched to foreground. williamr@2: williamr@2: - HandleSwitchOnEventL(): Machine switched on. williamr@2: williamr@2: - HandleSystemEventL(): System events. williamr@2: williamr@2: - HandleApplicationSpecificEventL(): Application-specific events. williamr@2: williamr@2: @publishedAll williamr@2: @released */ williamr@2: class CEikAppUi : public CCoeAppUi, public MEikMenuObserver, public MCoeMessageObserver, public MObjectProvider williamr@2: { williamr@2: public: williamr@2: IMPORT_C ~CEikAppUi(); williamr@2: IMPORT_C CEikAppUi(); williamr@2: public: // new functions williamr@2: IMPORT_C virtual void ConstructL(); williamr@2: IMPORT_C virtual void HandleModelChangeL(); williamr@2: IMPORT_C TLanguage ApplicationLanguageL() const; williamr@2: IMPORT_C CEikApplication* Application() const; williamr@2: IMPORT_C CEikDocument* Document() const; williamr@2: IMPORT_C void SetDocument(CEikDocument* aDocument); williamr@2: inline CEikAppUi* ContainerAppUi() const; williamr@2: IMPORT_C void SetEmbeddedDocInfo(MApaEmbeddedDocObserver* aObserver, TBool aReadOnly); williamr@2: IMPORT_C virtual TBool ProcessCommandParametersL(TApaCommand aCommand, TFileName& aDocumentName, const TDesC8& aTail); williamr@2: IMPORT_C virtual TBool ProcessCommandParametersL(CApaCommandLine& aCommandLine); williamr@2: // Application screen extent williamr@2: IMPORT_C TRect ClientRect() const; williamr@2: IMPORT_C virtual TRect ApplicationRect() const; williamr@2: // Menu utilities williamr@2: IMPORT_C void LaunchPopupMenuL(TInt aResourceId, const TPoint& aTargetPos, TPopupTargetPosType aTargetType, const CEikHotKeyTable* aHotKeyTable = NULL); williamr@2: IMPORT_C virtual void StopDisplayingMenuBar(); williamr@2: // Fading effect williamr@2: IMPORT_C TBool FadeWhenInBackground(); williamr@2: IMPORT_C virtual void SetFadedL(TBool aFaded); williamr@2: inline void SetFaded(TBool aFaded); //mm: has no implementation williamr@2: public: // new function williamr@2: IMPORT_C virtual void ReportResourceChangedToAppL(TInt aType); williamr@2: IMPORT_C virtual void HandleCommandL(TInt aCommand); williamr@2: IMPORT_C virtual void ProcessMessageL(TUid aUid, const TDesC8& aParams); williamr@2: IMPORT_C virtual void OpenFileL(const TDesC& aFileName); williamr@2: IMPORT_C virtual void CreateFileL(const TDesC& aFileName); williamr@2: IMPORT_C virtual TErrorHandlerResponse HandleError(TInt aError, const SExtendedError& aExtErr, TDes& aErrorText, TDes& aContextText); williamr@2: IMPORT_C virtual void HandleResourceChangeL(TInt aType); williamr@2: public: // from CCoeAppUi williamr@2: IMPORT_C void PrepareToExit(); williamr@2: protected: // new functions williamr@2: // Construction williamr@2: IMPORT_C void BaseConstructL(TInt aAppUiFlags = 0); williamr@2: IMPORT_C void ReadAppInfoResourceL(TInt aResourceFileOffset = 0); williamr@2: IMPORT_C void CreateHotKeyControlL(TInt aResourceId); williamr@2: IMPORT_C TBool ProcessCommandParametersL(TApaCommand aCommand, TFileName& aDocumentName); williamr@2: // User data change management williamr@2: IMPORT_C void SetDocChanged(); williamr@2: IMPORT_C void SaveAnyChangesL(); williamr@2: IMPORT_C void SaveL(); williamr@2: IMPORT_C virtual void Exit(); williamr@2: // Utility williamr@2: IMPORT_C void ClosePopup(); //mm: deprecate? williamr@2: protected: // from MEikMenuObserver williamr@2: IMPORT_C void HandleSideBarMenuL(TInt aResourceId,const TPoint& aPos,TInt aModifiers,const CEikHotKeyTable* aTable); williamr@2: protected: // from CCoeAppUi williamr@2: IMPORT_C void HandleApplicationSpecificEventL(TInt aType,const TWsEvent& aEvent); williamr@2: IMPORT_C void HandleForegroundEventL(TBool aForeground); williamr@2: IMPORT_C void HandleWsEventL(const TWsEvent& aEvent, CCoeControl* aDestination); williamr@2: IMPORT_C void HandleSystemEventL(const TWsEvent& aEvent); williamr@2: IMPORT_C void HandleScreenDeviceChangedL(); williamr@2: protected: // from MEikCommandObserver williamr@2: IMPORT_C void ProcessCommandL(TInt aCommand); williamr@2: private: // from MEikMenuObserver williamr@2: IMPORT_C void SetEmphasis(CCoeControl* aMenuWindow,TBool aEmphasis); williamr@2: protected: // from MCoeMessageObserver williamr@2: IMPORT_C MCoeMessageObserver::TMessageResponse HandleMessageL(TUint32 aClientHandleOfTargetWindowGroup, TUid aMessageUid, const TDesC8& aMessageParameters); williamr@2: protected: // from MObjectProvider williamr@2: IMPORT_C virtual TTypeUid::Ptr MopSupplyObject(TTypeUid aId); williamr@2: IMPORT_C virtual MObjectProvider* MopNext(); williamr@2: private: williamr@2: // Validate document file type williamr@2: IMPORT_C virtual TBool ValidFileType(TUid aFileUid) const; williamr@2: private: // spare virtuals williamr@2: IMPORT_C virtual void Reserved_3(); williamr@2: IMPORT_C virtual void Reserved_4(); williamr@2: public: williamr@2: /** Application resource file and screen furniture flags, passed to BaseConstructL(). */ williamr@2: enum williamr@2: { williamr@2: /** Application uses a standard resource file. */ williamr@2: EStandardApp = 0x00, williamr@2: /** Application has no resource file. */ williamr@2: ENoAppResourceFile = 0x01, williamr@2: /** Application uses a different resource file from the standard. */ williamr@2: ENonStandardResourceFile= 0x02, williamr@2: /** Application uses no screen furniture. */ williamr@2: ENoScreenFurniture = 0x04, williamr@2: /** Indicates the last value in the enum. */ williamr@2: ELastReservedEikAppUiFlag = 0x8000 williamr@2: }; williamr@2: public: williamr@2: IMPORT_C void ReportResourceChangedToAppStackL(CEikAppUi* aTopApp, TInt aEventId); williamr@2: CEikAppUiExtra* AppUiExtra(); williamr@2: private: williamr@2: void CreateResourceIndependentFurnitureL(); williamr@2: TBool ValidFileExistsL(const TDesC& aFileName); williamr@2: protected: williamr@2: /** A pointer to the application's document. */ williamr@2: CEikDocument* iDocument; williamr@2: /** A pointer to the containing app UI. This is NULL for non-embedded williamr@2: apps. */ williamr@2: CEikAppUi* iContainerAppUi; williamr@2: /** Embedded document observer. */ williamr@2: MApaEmbeddedDocObserver* iDoorObserver; williamr@2: /** Indicates whether or not this is the app UI for an embedded, williamr@2: read-only document. */ williamr@2: TBool iEmbeddedAndReadOnly; williamr@2: TInt iFlags; williamr@2: private: williamr@2: enum williamr@2: { williamr@2: EEmbedded = 0x01 williamr@2: }; williamr@2: private: williamr@2: CEikAppUiExtra* iAppUiExtra; williamr@2: }; williamr@2: williamr@2: williamr@2: williamr@2: /** Returns the app UI inside which this app UI is embedded. williamr@2: Embedded app UIs are used for editing embedded documents. williamr@2: williamr@2: @return A pointer to this object's container app UI. NULL if this app williamr@2: UI is not embedded */ williamr@2: inline CEikAppUi* CEikAppUi::ContainerAppUi() const williamr@2: { return iContainerAppUi; } williamr@2: williamr@2: #endif // __EIKAPPUI_H__