// COEPRIV.H
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#if !defined(__COEPRIV_H__)
#define __COEPRIV_H__

#if !defined(__E32BASE_H__)
#include <e32base.h>
#endif

#if !defined(__BRDCST_H__)
#include <brdcst.h>
#endif

#if !defined(__BASCHED_H__)
#include <basched.h>
#endif

class CCoeEnv;
class CCoeScheduler : public CBaActiveScheduler
	{
public:
	CCoeScheduler(CCoeEnv* aCoeEnv);
	virtual void WaitForAnyRequest();
	virtual void DisplayError(TInt aError) const;
	TBool Flush() const { return iFlush; }
	void SetFlush(TBool aFlush) { iFlush = aFlush; }
private:
	CCoeEnv* iCoeEnv;
	TBool iFlush;
	};

class RWsSession;
class CCoeRedrawer : public CActive
	{
public:
	CCoeRedrawer(RWsSession* aWsSession);
	~CCoeRedrawer();
	void RunL();
	void Queue();
	void DoCancel();
private:
	RWsSession* iWsSession;
	};

typedef CCoeFep* (*TCoeFepFactoryFunctionL)(const CCoeFepParameters& aFepParameters, const TDesC& aFullFileNameOfDll);
typedef void (*TCoeSynchronouslyExecuteFepSettingsDialogFunctionL)();
class CCoeFepLoader : public CActive
	{
public:
	static CCoeFepLoader* NewL(CCoeEnv& aCoeEnv, CCoeFepLoader*& aOwner);
	virtual ~CCoeFepLoader();
private:
	CCoeFepLoader(CCoeEnv& aCoeEnv, CCoeFepLoader*& aOwner);
	virtual void DoCancel();
	virtual void RunL();
private:
	CCoeEnv& iCoeEnv;
	CCoeFepLoader*& iOwner;
	};

class CCoeFepTracker : public CBrdBroadcastServerSessionActiveWrapper
	{
public:
	static CCoeFepTracker* NewL(CBrdBroadcastServerSession& aBroadcastServerSession, CCoeEnv& aCoeEnv);
	void FepHasChanged();
private:
	enum {EBroadcastUid=0x10001566};
private:
	CCoeFepTracker(CBrdBroadcastServerSession& aBroadcastServerSession, CCoeEnv& aCoeEnv);
	virtual void HandleBroadcastReceiptL();
private:
	CCoeEnv& iCoeEnv;
	};
#endif
