// EIKAPPUI.H
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#if !defined(__EIKAPPUI_H__)
#define __EIKAPPUI_H__

#if !defined(__COEAUI_H__)
#include <coeaui.h>
#endif

#if !defined(__EIKMOBS_H__)
#include <eikmobs.h>
#endif

#if !defined(__APADEF_H__)
#include <apadef.h>
#endif

#if !defined(__EIKDEF_H__)
#include <eikdef.h>
#endif

#if !defined(__BAERRHAN_H__)
#include <baerrhan.h>
#endif

class CEikMenuBar;
class CEikMenuPane;
class CEikToolBar;
class CEikDocument;
class CEikApplication;
class MApaEmbeddedDocObserver;
struct SExtendedError;

class CEikAppUi : public CCoeAppUi, public MEikMenuObserver
	{
public:
	IMPORT_C ~CEikAppUi();
	IMPORT_C CEikAppUi();
public: // new functions
	IMPORT_C virtual void ConstructL();
	IMPORT_C virtual void HandleModelChangeL();
	IMPORT_C void LaunchPopupMenuL(TInt aResourceId,const TPoint& aTargetPos,TPopupTargetPosType aTargetType,const CEikHotKeyTable* aHotKeyTable=NULL);
	inline CEikMenuBar* MenuBar() const;
	inline CEikMenuPane* Popup() const;
	inline CEikAppUi* ContainerAppUi() const;
	IMPORT_C void SetDocument(CEikDocument* aDocument);
	IMPORT_C void SetEmbeddedDocInfo(MApaEmbeddedDocObserver* aObserver,TBool aReadOnly);
	IMPORT_C virtual TBool ProcessCommandParametersL(TApaCommand aCommand,TFileName& aDocumentName,const TDesC8& aTail);
	IMPORT_C CEikDocument* Document() const;
	IMPORT_C CEikApplication* Application() const;
	IMPORT_C TRect ClientRect() const;
	IMPORT_C void StopDisplayingMenuBar();
public: // new function
	IMPORT_C virtual void HandleCommandL(TInt aCommand);
	IMPORT_C virtual void ProcessMessageL(TUid aUid,const TDesC8& aParams);
	IMPORT_C virtual void OpenFileL(const TDesC& aFileName);
	IMPORT_C virtual void CreateFileL(const TDesC& aFileName);
	IMPORT_C virtual TErrorHandlerResponse HandleError(TInt aError,const SExtendedError& aExtErr,TDes& aErrorText,TDes& aContextText);
protected: // new functions
	IMPORT_C void BaseConstructL(TInt aAppUiFlags=0);
	IMPORT_C void ReadAppInfoResourceL(TInt aResourceFileOffset=0);
	IMPORT_C void CreateHotKeyControlL(TInt aResourceId);
	IMPORT_C void SetDocChanged();
	IMPORT_C void SaveAnyChangesL();
	IMPORT_C void Exit();
	IMPORT_C void SaveL();
	IMPORT_C void ClosePopup();
	IMPORT_C TBool ProcessCommandParametersL(TApaCommand aCommand,TFileName& aDocumentName);
protected: // from MEikMenuObserver
	IMPORT_C void HandleSideBarMenuL(TInt aResourceId,const TPoint& aPos,TInt aModifiers,const CEikHotKeyTable* aTable);
private: // from CCoeAppUi
	IMPORT_C void HandleSystemEventL(const TWsEvent& aEvent);
	IMPORT_C void HandleMessageReadyL();
private: // from MEikCommandObserver
	IMPORT_C void ProcessCommandL(TInt aCommand);
private: // from MEikMenuObserver
	IMPORT_C void SetEmphasis(CCoeControl* aMenuWindow,TBool aEmphasis);
private: // from CCoeAppUiBase
	IMPORT_C void Reserved_1();
	IMPORT_C void Reserved_2();
private: // new functions
	IMPORT_C virtual TBool ValidFileType(TUid aFileUid) const;
	IMPORT_C virtual void Reserved_3();
	IMPORT_C virtual void Reserved_4();
	void DoLaunchPopupL(TInt aResourceId,const TPoint& aTargetPos, const CEikHotKeyTable* aHotKeyTable, TPopupTargetPosType aTargetType = EPopupTargetTopLeft);
public:
	enum
		{
		EStandardApp			= 0x00,
		ENoAppResourceFile		= 0x01,
		ENonStandardResourceFile= 0x02
		};
private: // new functions
	void AddTitleBandL();
	TBool ValidFileExists(const TDesC& aFileName);
private:
	struct SEikAppInfo
		{
		TInt iHotKeysId;
		TInt iMenuBarId;
		TInt iToolBarId;
		TInt iToolBandId;
		};
protected:
	CEikDocument* iDocument;
	CEikToolBar* iToolBar;
	CEikToolBar* iToolBand;
	CEikAppUi* iContainerAppUi;
	CEikToolBar* iTitleBand;
	CEikMenuBar* iMenuBar;
	MApaEmbeddedDocObserver* iDoorObserver;
	TBool iEmbeddedAndReadOnly;
private:
	CEikMenuPane* iPopup;
	TInt iSidebarPopupId;
	};

inline CEikAppUi* CEikAppUi::ContainerAppUi() const
	{ return iContainerAppUi; }
inline CEikMenuBar* CEikAppUi::MenuBar() const
	{ return iMenuBar; }
inline CEikMenuPane* CEikAppUi::Popup() const
	{ return iPopup; }

#endif
