// EIKALMCT.H
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#if !defined (__EIKALMCT_H__)
#define __EIKALMCT_H__

#if !defined (__EIKBCTRL_H__)
#include <eikbctrl.h>
#endif

#if !defined(__COECCNTX_H__)
#include <coeccntx.h>
#endif

#if !defined(__T32ALM_H__)
#include <t32alm.h>
#endif

#if !defined(__T32WLD_H__)
#include <t32wld.h>
#endif

//
// CEikAlarmControlChangeNotifier
//

class CEikAlarmControlDateTime;
class CEikAlarmControlChangeNotifier : public CActive
	{
public:
	CEikAlarmControlChangeNotifier(CEikAlarmControlDateTime* aClient);
	~CEikAlarmControlChangeNotifier();
	void ConstructL();
protected: // virtual
	virtual void DoCancel();
	virtual void RunL();
private: // new functions
	TInt Logon();
private:
	RChangeNotifier iChangeNotifier;
	CEikAlarmControlDateTime* iClient;
	};

//
// CEikAlarmControlDateTime class
//

class CEikClock;
class CEikLabel;
class CEikAlarmControlDateTime : public CEikBorderedControl, public MCoeControlBrushContext
	{
public: // new functions
	CEikAlarmControlDateTime();
	~CEikAlarmControlDateTime();
	void ConstructL();
	void UpdateDate();
	void UpdateCityInfo();
public:	// virtual 
	virtual TSize MinimumSize();
protected: // virtual
	virtual void SizeChangedL();
	virtual TInt CountComponentControls() const;
	virtual CCoeControl* ComponentControl(TInt aIndex) const;
private: // framework
	virtual void Draw(const TRect& aRect) const;
private:
	CEikAlarmControlChangeNotifier* iChangeNotifier;
	CEikClock* iDigitalClock;
	};

//
// CEikAlarmControlTime class
//

class CEikAlarmControlTime : public CEikBorderedControl
	{
public: // specific
	CEikAlarmControlTime();
	~CEikAlarmControlTime();
	void ConstructL();
	TInt MinimumWidth();
	void UpdateDate();
	void UpdateCityInfo();
protected: // framework
	virtual void SizeChangedL();
	virtual TInt CountComponentControls() const;
	virtual CCoeControl* ComponentControl(TInt aIndex) const;
private: // framework
	virtual void Draw(const TRect& aRect) const;
private:
	CEikClock* iAnalogClock;
	CEikAlarmControlDateTime* iDateTime;
	CEikLabel* iCityInfo;
	RWorldServer iWorldServer;
	};

//
// CEikAlarmControlInfo
//

class CEikAlarmControlInfo : public CEikBorderedControl, public MCoeControlBrushContext
	{
public: // enums
	enum TSilentType { ESilentAlarm, EAlarmSilenced };
public: // specific
	CEikAlarmControlInfo();
	~CEikAlarmControlInfo();
	void ConstructL();
	void SetSoundOff();
	void SetManyDueAlarms();
	void SetNoSoundToPlay(TSilentType aSilentType);
	void SetNoMemoryToSnooze();
	void SetPauseSoundTime(TInt aMinutes);
	void SetAlarm(const TAlarmInfo& aAlarm, const TDesC& aOwner);
	void SetQuietPeriodTimeEnd(TTime aDeferUntil);
	void DrawSnoozeLabelNow() const;
	void DrawAllLabelsNow() const;
public: // framework
    virtual TInt CountComponentControls() const;
    virtual CCoeControl* ComponentControl(TInt aIndex) const;
protected: // framework
	virtual void SizeChangedL();
private: // framework
	virtual void Draw(const TRect& aRect) const;
private: // specific
	void SetLabelText(TInt aIndex, const TDesC& aText);
	void SetAndLayoutAlarmMessage(const TAlarmMessage& aMessage);
	TInt DetermineMessageSplit(const TAlarmMessage& aMessage, TInt aWidth, TInt aStart) const;
private: // enums
	enum TLabelType
		{
		EFirst,
		EDue=EFirst,
		EMessage,
		ESnooze,
		ELast
		};
private:
	CEikLabel* iLabels[ELast];
	TRect iTextRect;
	const CFont* iFont;
	};

//
// CEikAlarmControl class
//

class CEikControlGroup;
class CEikAlmControlSupervisor;
class CEikServAppUi;
class CEikAlarmControl : public CEikBorderedControl, public MCoeControlObserver, public MCoeControlBrushContext
	{
public: // specific
	 CEikAlarmControl(CEikAlmControlSupervisor* aSupervisor, CEikServAppUi* aAppUi);
	 ~CEikAlarmControl();
	void ConstructL();
	void ShowAlarm();
	void HideAlarm();
	inline TInt CurrentServerState() const;
	void UpdateSoundPauseTimeInterval(TInt aMinutes);
	void UpdateForAlarmServerState(TInt aNewAlarmServerState);
	void UpdateAlarmInfo(const TAlarmInfo& aAlarm,const TFullName& aOwner);
public: // framework
	virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
    virtual TInt CountComponentControls() const;
    virtual CCoeControl* ComponentControl(TInt aIndex) const;
	virtual TSize MinimumSize();
	virtual void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType);
protected: // framework
	virtual void SizeChangedL();
private: // framework
	virtual void Draw(const TRect& aRect) const;
private: // specific
	void LayoutButtons(const TRect& aRect);
	void CheckSilenceButtonDimmed();
private:
	CEikAlarmControlTime* iTime;
	CEikAlarmControlInfo* iAlarmInfoView;
	CEikControlGroup* iButtons;
	TInt iCurrentAlarmServerState;
	CEikAlmControlSupervisor* iSupervisor;
	TInt32 iExternalKeys[3];
	TInt32 iExternalKeyUpAndDowns[3];
	CEikServAppUi* iAppUi;
	};

inline TInt CEikAlarmControl::CurrentServerState() const
	{
	return(iCurrentAlarmServerState);
	}

#endif



