// EMAILSET.H
//
// Copyright (c) 1998 Symbian Ltd. All rights reserved.
//
// Standard email settings dialog, incorporating settings for SMTP, POP3 and IMAP4.

#if !defined(__EMAILSET_H__)

#if !defined(__EIKDIALG_H__)
#include <eikdialg.h>
#endif

// 
// --- Forward declarations ---
class CImBaseEmailSettings;
class CImImap4Settings;
class CImPop3Settings;
class CImSmtpSettings;
class CMsvSession;
// 

class CEmailServiceSettingsDialog : public CEikDialog
	{
public: 
	IMPORT_C static CEmailServiceSettingsDialog* NewServiceL(TDes& aName, CImSmtpSettings& aSmtpSettings, 
		CImPop3Settings& aPop3Settings, CImImap4Settings& aImap4Settings, TBool& aPop3OrImap4/*If false, is Imap4*/, TBool& aIsDefault, CMsvSession& aSession);
	
	IMPORT_C static CEmailServiceSettingsDialog* EditPop3ServiceL(TDes& aName, CImSmtpSettings& aSmtpSettings, 
		CImPop3Settings& aPop3Settings, TBool& aIsDefault, CMsvSession& aSession, TMsvId aId);

	IMPORT_C static CEmailServiceSettingsDialog* EditImap4ServiceL(TDes& aName, CImSmtpSettings& aSmtpSettings, 
		CImImap4Settings& aImap4Settings, TBool& aIsDefault, CMsvSession& aSession, TMsvId aId);

	IMPORT_C ~CEmailServiceSettingsDialog();

private:
	CEmailServiceSettingsDialog(TDes& aName, CImSmtpSettings& aSmtpSettings, CImPop3Settings* aPop3Settings,
		CImImap4Settings* aImap4Settings, TBool* aPop3OrImap4, TBool& aIsDefault, CMsvSession& aSession, TMsvId aId);
	// --- From CEikDialog ---
	virtual void HandleControlStateChangeL(TInt aControlId);
	virtual TBool OkToExitL(TInt aButtonId);
	virtual void PostLayoutDynInitL();
	virtual void PreLayoutDynInitL();
	// 
	// --- Specific to CEmailServiceSettingsDialog ---
	TBool IsServiceNameUsedL(const TDesC& aName) const;
	void FocusToErrorControlL(TInt aErrorRid, TInt aBadControlId);
	TBool SaveServerL(CImBaseEmailSettings& aSettings);
	TBool CheckPasswordL(TDes& aPwdReturn);
	void UpdateTitleL(const TDesC& aTitle);
	void HandleMailboxTypeChangeL();
	void CheckHaveSettingsL();
	//
	// --- Pop3 ---
	void SeedPop3SettingsFromImap4SettingsL();
	TBool SavePop3DetailsL();
	TBool SavePop3PasswordL();
	TBool SavePop3LoginL();
	//
	// --- Imap4 ---
	void SeedImap4SettingsFromPop3SettingsL();
	TBool SaveImap4DetailsL();
	TBool SaveImap4PasswordL();
	TBool SaveImap4LoginL();
	//
	// --- Smtp ---
	TBool SaveSmtpDetailsL();

private:
	// --- Data --
	TDes&				iName;
	CImSmtpSettings&	iSmtpSettings;
	CImPop3Settings*	iPop3Settings;
	CImImap4Settings*	iImap4Settings;
	HBufC*				iTitleText;
	HBufC*				iImap4ServerPrompt;
	HBufC*				iPop3ServerPrompt;
	TBool*				iMailboxType;//If true, is POP3
	TBool&				iIsDefault;
	TBool				iIMAP4available;
	CMsvSession&		iSession;
	TMsvId				iId;
	};



class CEmailServiceAdvancedSettingsDialog : public CEikDialog
	{
public:
	// --- Construction ---
	CEmailServiceAdvancedSettingsDialog(CImSmtpSettings& aSmtpmtm);

protected:
	// --- utility ---
	TBool CheckPortDuplicationL(TInt aIncomingPort);
	virtual void ResetL();
	//
	// --- From CEiKDialog ---
	virtual void PreLayoutDynInitL();
	virtual TBool OkToExitL(TInt aButtonId);

private: 
	// --- Data ---
	CImSmtpSettings&	iSmtpSettings;
	};

//
// Advanced POP3 settings
class CPop3ServiceAdvancedSettingsDialog : public CEmailServiceAdvancedSettingsDialog
	{
public:
	// --- Construction ---
	CPop3ServiceAdvancedSettingsDialog(CImSmtpSettings& aSmtpmtm, CImPop3Settings& aPop3Set);

private:
	virtual void ResetL();
	// --- From CEiKDialog ---
	virtual void PreLayoutDynInitL();
	virtual TBool OkToExitL(TInt aButtonId);

private: 
	// --- Data ---
	CImPop3Settings&	iPop3Settings;
	};

//
// Advanced IMAP4 settings
class CImap4ServiceAdvancedSettingsDialog : public CEmailServiceAdvancedSettingsDialog
	{
public:
	// --- Construction ---
	CImap4ServiceAdvancedSettingsDialog(CImSmtpSettings& aSmtpmtm, CImImap4Settings& aPop3Set);

private:
	virtual void ResetL();
	// --- From CEiKDialog ---
	virtual void PreLayoutDynInitL();
	virtual TBool OkToExitL(TInt aButtonId);

private: 
	// --- Data ---
	CImImap4Settings&	iImap4Settings;
	};

#endif //__EMAILSET_H__
