// XTPCalendarWeekViewEvent.h: interface for the CXTPCalendarWeekViewEvent class.
//
// This file is a part of the XTREME CALENDAR MFC class library.
// (c)1998-2012 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////

//{{AFX_CODEJOCK_PRIVATE
#if !defined(__XTPCALENDARWEEKVIEWEVENT_H_)
#define __XTPCALENDARWEEKVIEWEVENT_H_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//}}AFX_CODEJOCK_PRIVATE

class CXTPCalendarControl;
class CXTPCalendarWeekView;
class CXTPCalendarWeekViewDay;
class CXTPCalendarWeekViewGroup;
class CXTPCalendarEvent;
struct XTP_CALENDAR_HITTESTINFO;

//===========================================================================
// Summary:
//     This class represents an event view portion of the CalendarWeekViewDay.
// Remarks:
//     It represents a specific view of the event associated data according
//     to various view types and display settings and provides basic
//     functionality on this data using user input through the keyboard and mouse.
//
//          CXTPCalendarWeekViewEvent is based on CXTPCalendarViewEventT template
//          class. CXTPCalendarWeekViewEvent inherits basic behavior from CXTPCalendarViewEventT.
//          Furthermore, CXTPCalendarWeekViewEvent overlaps some functionality in
//          CXTPCalendarViewEventT and also adds some new functionality for its
//          own behavior and look.
//
// See Also: CXTPCalendarViewEvent, CXTPCalendarViewEventT
//===========================================================================
class _XTP_EXT_CLASS CXTPCalendarWeekViewEvent : public CXTPCalendarViewEventT<CXTPCalendarWeekViewGroup>
{
	//{{AFX_CODEJOCK_PRIVATE
	DECLARE_DYNAMIC(CXTPCalendarWeekViewEvent)
	//}}AFX_CODEJOCK_PRIVATE
public:

	//------------------------------------------------------------------------
	// Summary:
	//     Base class type definition.
	//------------------------------------------------------------------------
	typedef CXTPCalendarViewEventT<CXTPCalendarWeekViewGroup> TBase;

	//-----------------------------------------------------------------------
	// Summary:
	//     Default object constructor.
	// Parameters:
	//     pViewGroup - A pointer to a CXTPCalendarWeekViewGroup object.
	//     pEvent     - A pointer to a CXTPCalendarEvent.
	// See Also: ~CXTPCalendarWeekViewDay()
	//-----------------------------------------------------------------------
	CXTPCalendarWeekViewEvent(CXTPCalendarEvent* pEvent, CXTPCalendarWeekViewGroup* pViewGroup);

	//-----------------------------------------------------------------------
	// Summary:
	//     Default class destructor.
	//-----------------------------------------------------------------------
	virtual ~CXTPCalendarWeekViewEvent();

	//-----------------------------------------------------------------------
	// Summary:
	//     This member function is used to fill a XTP_CALENDAR_HITTESTINFO structure.
	// Parameters:
	//     point - A CPoint object that contains the point to test.
	//     pInfo - A pointer to a XTP_CALENDAR_HITTESTINFO struct.
	// Returns:
	//     TRUE if the test is successful, FALSE else.
	// Remarks:
	//     Call this member function to gather hit test information from
	//     the day view.
	// See Also: XTP_CALENDAR_HITTESTINFO
	//-----------------------------------------------------------------------
	virtual BOOL HitTestEx(CPoint point, XTP_CALENDAR_HITTESTINFO* pInfo) const;

	//-----------------------------------------------------------------------
	// Summary:
	//     This member function is used to adjust rectangles used to draw
	//     event view icons.
	// Parameters:
	//     rc - A CRect that contains the rectangle coordinates used to
	//          draw the view.
	// Remarks:
	//     Call this member function to calculate rectangles to draw event
	//     view icons. Depends on what glyphs should be drawn based on the
	//     event view rect.
	//-----------------------------------------------------------------------
	virtual int CalcIconsRect(CRect rc);

	//-----------------------------------------------------------------------
	// Summary:
	//     This member function is used to adjust the view's layout
	//     depending on the provided rectangle and also calls AdjustLayout()
	//     for all sub-items.
	// Parameters:
	//     pDC                 - A pointer to a valid device context.
	//     rcEventMax          - An int that contains the rectangle coordinates
	//                           used to draw the view.
	//     nEventPlaceNumber   - An int that contains the sequential place number.
	// Remarks:
	//     Call Populate(COleDateTime dtDayDate) prior calling AdjustLayout().
	//-----------------------------------------------------------------------
	virtual void AdjustLayout(CDC* pDC, const CRect& rcEventMax, int nEventPlaceNumber);
	virtual void AdjustLayout2(CDC* pDC, const CRect& rcEventMax, int nEventPlaceNumber); //<COMBINE AdjustLayout>

	//-----------------------------------------------------------------------
	// Summary:
	//     This member function is used to draw the view content using the
	//     specified device context.
	// Parameters:
	//     pDC - A pointer to a valid device context.
	// Remarks:
	//     Call AdjustLayout() before calling Draw().
	// See Also: AdjustLayout(CRect rcDay)
	//-----------------------------------------------------------------------
	virtual void Draw(CDC* pDC);

	//-----------------------------------------------------------------------
	// Summary:
	//     Call this member function to determine if the "view visible" flag is set.
	// Returns:
	//     A BOOL. TRUE if the "view visible" is set. FALSE otherwise.
	//-----------------------------------------------------------------------
	virtual BOOL IsVisible() const;

	//-----------------------------------------------------------------------
	// Summary:
	//     Call this member function to get the day view rectangle coordinates.
	// Returns:
	//     A CRect object with the day rectangle coordinates.
	// See Also: SetDayRect(CRect rcDay)
	//-----------------------------------------------------------------------
	CRect GetViewRect();

	//-----------------------------------------------------------------------
	// Summary:
	//     Call this member function to determine the value of the "show end time" flag.
	// Returns:
	//     A BOOL. TRUE if "show end time" flag is set. FALSE otherwise.
	//-----------------------------------------------------------------------
	BOOL IsShowEndTime() const;

	//-----------------------------------------------------------------------
	// Summary:
	//     Call this member function to determine the value of the "show time as clock" flag.
	// Returns:
	//     A BOOL. TRUE if the "show time as clock" flag is set. FALSE otherwise.
	//-----------------------------------------------------------------------
	BOOL IsTimeAsClock() const;

	//-----------------------------------------------------------------------
	// Summary:
	//     This member function is used to perform additional adjustments.
	// Remarks:
	//     Call this member function to perform additional adjustments after
	//     all adjustment activities are completed.
	//-----------------------------------------------------------------------
	virtual void OnPostAdjustLayout();

protected:

	//-----------------------------------------------------------------------
	// Summary:
	//     Call this member function to determine the editor window font.
	// Returns:
	//     A pointer to a CFont object that contains the editor window font.
	//-----------------------------------------------------------------------
	virtual CFont* GetSubjectEditorFont() const;
};
////////////////////////////////////////////////////////////////////////////

AFX_INLINE CRect CXTPCalendarWeekViewEvent::GetViewRect() {
	return m_rcEvent;
}

#endif // !defined(__XTPCALENDARWEEKVIEWEVENT_H_)