// XTPDatePickerItemMonth.h: interface for the CXTPDatePickerItemMonth 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(_XTPDATEPICKERITEMMONTH_H__) #define _XTPDATEPICKERITEMMONTH_H__ //}}AFX_CODEJOCK_PRIVATE #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 //{{AFX_CODEJOCK_PRIVATE // Maximum amount of weeks shown in one month area. const UINT XTP_MAX_WEEKS = (UINT)6; // Number of days in the week. const UINT XTP_WEEK_DAYS = (UINT)7; //}}AFX_CODEJOCK_PRIVATE class CXTPDatePickerControl; class CXTPDatePickerItemDay; //=========================================================================== //----------------------------------------------------------------------- // Summary: // Class CXTPDatePickerItemMonth represents one month inside the // date picker month grid. // Remarks: // Call the constructor to create the object and provide a pointer // to the DatePicker control. The date value corresponds to the first // day of the month and the grid coordinates. It is not necessary to // add day items to the month item after creation. The month item // constructor calls the day item constructor and fills the day items. // See Also: CXTPDatePickerItemDay //=========================================================================== class _XTP_EXT_CLASS CXTPDatePickerItemMonth : public CXTPCmdTarget { //{{AFX_CODEJOCK_PRIVATE friend class CXTPDatePickerControl; friend class CXTPDatePickerPaintManager; //}}AFX_CODEJOCK_PRIVATE public: // ------------------------------------------------------------------------ // Summary: // Default CXTPDatePickerItemMonth object constructor. // Parameters: // pControl : A CXTPDatePickerControl pointer to the parent DatePicker // control. // dtMonth : A COleDateTime object date of the first day of the month. // nRow : An int that contains the vertical coordinate of the month // in the control's months grid. // nCol : An int that contains the horizontal coordinate of the month // in the control's months grid. // Remarks: // Handles initial initialization, populates the month item with the // corresponding day items. // See Also: // PopulateDays(), CXTPDatePickerItemDay // ------------------------------------------------------------------------ CXTPDatePickerItemMonth(CXTPDatePickerControl* pControl, COleDateTime dtMonth, int nRow, int nCol); //----------------------------------------------------------------------- // Summary: // Default collection destructor. // Remarks: // Handles member items deallocation. // See Also: ClearDays() //----------------------------------------------------------------------- virtual ~CXTPDatePickerItemMonth(); // ---------------------------------------------------------------------------- // Summary: // Call this member function to adjust the layout of all sub-items. // Parameters: // rcClient : A CRect object that contains the coordinates of the control. // bIsAuto : A BOOL that determines the method that is used to adjust the // layout\: If TRUE \- The layout is adjusted depending on the // given control client area rectangle. If FALSE \- The layout // calculations depend on the current display settings of all // included items (day items, header items) and the current // device context. // Remarks: // Adjusts the layout of all sub-items in two different ways // depending on the bIsAuto parameter. If bIsAuto = TRUE, then the // layout is adjusted depending on the given control's client area // rectangle. In this case the given count of month items is adjusted // to fit the client area. If bIsAuto = FALSE, then the layout // calculation depends on the current display settings of all // included items (day items, header items) and the current device // context. In this case the size of one month item is calculated // first, this then determines the count of the month items that fit // into the control's client rectangle. Note: The second method is // the default mode. // ---------------------------------------------------------------------------- void AdjustLayout(CRect rcClient, BOOL bIsAuto = FALSE); //----------------------------------------------------------------------- // Summary: // Call this member function to perform drawing logic. // Parameters: // pDC - Pointer to a valid device context. // Remarks: // This function performs all drawing logic. // This member function is used to display the month item. It does not // perform any adjustments or size corrections. You must call // AdjustLayout(CRect rcClient, BOOL bIsAuto = FALSE) first to // handle all adjustments. // See Also: AdjustLayout(CRect rcClient, BOOL bIsAuto = FALSE) //----------------------------------------------------------------------- virtual void Draw(CDC* pDC); // --------------------------------------------------------------------- // Summary: // Call this member function to obtain the month date. // Remarks: // Use this member function to identify the month by date. Use the // date that corresponds to the first day of the month. // Returns: // A ColeDateTime object that contains the month date for which this // item represents. // --------------------------------------------------------------------- COleDateTime GetMonth() const; // ---------------------------------------------------------------------- // Summary: // Call this member function to determine if the days before a given // month are displayed. // Remarks: // This option allows changing the behavior of the control in the // following way: If the first day of the month is Wednesday you may // wish to leave places for Monday and Tuesday items empty to display // the last days from previous month item. // Returns: // Boolean value that determines if the days before this month are // visible. TRUE if the days before this month are visible. Otherwise // FALSE. // See Also: // SetShowDaysBefore(BOOL bShow), SetShowDaysAfter(BOOL bShow), // GetShowDaysAfter() // ---------------------------------------------------------------------- BOOL GetShowDaysBefore() const; // ---------------------------------------------------------------------- // Summary: // Call this member function to determine whether to show the days // after this month. // Remarks: // This option allows changing the behavior of the control in the // following way: If the last day of the month is Wednesday you may // wish to leave places for the remaining day items empty or display // the beginning days from the next month item. // Returns: // Boolean value determines whether to show the days after this // month. TRUE - If the days after this month are visible. FALSE - If // the days after this month are not visible. // See Also: // GetShowDaysBefore() // ---------------------------------------------------------------------- BOOL GetShowDaysAfter() const; // --------------------------------------------------------------------------------- // Summary: // Call this member function to set whether days before this month // are shown. // Parameters: // bShow : Boolean value that determines if the days before this month are // displayed.

TRUE if the days before this month are shown.

FALSE // if the days before this month are not shown. // Remarks: // This option allows changing the behavior of the control in the // following way: If the first day of the month is Wednesday you may // leave places for Monday and Tuesday items empty or display the // last days from the previous month item. // See Also: // GetShowDaysBefore() // --------------------------------------------------------------------------------- void SetShowDaysBefore(BOOL bShow); // ---------------------------------------------------------------------------------- // Summary: // Call this member function to set whether days after this month are // shown. // Parameters: // bShow : Boolean value that determines if the days after this month are // displayed.

TRUE if the days after this month are visible.

FALSE // if the days after this month are not visible. // Remarks: // This option allows changing the behavior of the control in the // following way: If the last day of month is Wednesday you may wish // to leave places for remaining day items empty or display the // beginning days from next month item. // See Also: // GetShowDaysAfter() // ---------------------------------------------------------------------------------- void SetShowDaysAfter(BOOL bShow); //----------------------------------------------------------------------- // Summary: // Call this member function to determine if the left scroll // triangle is visible. // Remarks: // This option allows using scrolling facilities to find and work // with month items that currently are not shown in the control. // ScrollV to desired month item using the scroll triangle // icon. // Returns: // Boolean value determines if the left scroll triangle is visible. // TRUE - If the left scroll triangle is visible. // FALSE - If the left scroll triangle is not visible. // See Also: GetShowRightScroll, SetShowScrolling //----------------------------------------------------------------------- BOOL GetShowLeftScroll() const; // ---------------------------------------------------------------------- // Summary: // Call this member function to determine if the right scroll // triangle is visible. // Remarks: // This option allows scrolling facilities to find and work with // month items that currently are not shown in the control. ScrollV to // desired month item using the scroll triangle icon. // Returns: // Boolean value that determines if the right scroll triangle is // visible. // TRUE - If the right scroll triangle is visible. // FALSE - If the right scroll triangle is not visible. // See Also: // GetShowLeftScroll, SetShowScrolling // ---------------------------------------------------------------------- BOOL GetShowRightScroll() const; // ------------------------------------------------------------------------------ // Summary: // Call this member function to add the left and the right scrolling // triangles. // Parameters: // bLeftScroll : Boolean value determines if the left scroll triangle is // visible.

TRUE Left scrolling triangle is visible. Right // scrolling triangle is visible.

FALSE Left scrolling // triangle is not visible. Right scrolling triangle is not // visible. // bRightScroll : Boolean value determines if the right scroll triangle is // visible. // Remarks: // This option allows scrolling facilities to find and work with // month items that currently aren't shown in the control. ScrollV to // the desired month item using the scroll triangle icon. In some // cases scrolling is not needed, and you can hide one or both // scrolling triangles. // See Also: // GetShowLeftScroll, GetShowRightScroll // ------------------------------------------------------------------------------ void SetShowScrolling(BOOL bLeftScroll, BOOL bRightScroll); // ---------------------------------------------------------------------- // Summary: // Call this member function to obtain the day item by its index in // the day collection of the month. // Parameters: // nIndex : An int that contains the zero\-based index value. // Remarks: // If the index value is less than 0 and greater then the value // returned by GetDayCount() the function returns NULL. // Example: // // // Enumerate the month array. // CPoint point (100, 100); // int nDayCount = GetDayCount(); // for (int nDay = 0; nDay \< nDayCount; nDay++) // { // CXTPDatePickerItemDay* pDay = GetDay(nDay); // if (pDay && pDay-\>GetRect().PtInRect(point) && pDay-\>IsVisible()) // return pDay; // } // // Returns: // A pointer to a CXTPDatePickerItemDay object or NULL if the index // is invalid. // See Also: // GetDayCount() // ---------------------------------------------------------------------- CXTPDatePickerItemDay* GetDay(int nIndex) const; // ---------------------------------------------------------------------- // Summary: // Call this member function to obtain the number of day items in the // month collection. // Returns: // An int that contains the number of items stored in the collection. // See Also: // GetDay(int nIndex) // ---------------------------------------------------------------------- int GetDayCount() const; //----------------------------------------------------------------------- // Summary: // Call this function to return the day where the mouse cursor was // located when the left mouse button was clicked. // Parameters: // point : A CPoint object that specifies the x\- and y\- coordinates // of the cursor. // bCheckVisible : TRUE when check visibility flag of the day item. // If this parameter is FALSE, the method would return pointer // to the corresponding day item even if this day is hidden // (for example days from previous month). // It is TRUE by default. // Remarks: // This member function is heavily used by all event handlers to // determine the item that was disturbed by the mouse pointer. If // item was found, then the function returns a pointer to item, // \otherwise NULL is returned. // Returns: // \Returns a pointer to the affected day item. Returns NULL if the // left mouse button was clicked outside any day area. //----------------------------------------------------------------------- CXTPDatePickerItemDay* HitTest(CPoint point, BOOL bCheckVisible = TRUE) const; protected: //----------------------------------------------------------------------- // Summary: // Call this member function to cleanup the days array. // Remarks: // Handles cleanup of days collection, including each day item. //----------------------------------------------------------------------- void ClearDays(); // ---------------------------------------------------------- // Summary: // Call this member function to populate the day objects. // Remarks: // Creates days objects based on the current settings. // ---------------------------------------------------------- void PopulateDays(); // --------------------------------------------------------------------- // Summary: // This member function is called to process left button down mouse // messages. // Parameters: // nFlags : A UINT that is used to indicate whether various virtual // keys are down. // point : A CPoint object that specifies the x\- and y\- coordinates // of the cursor. // Remarks: // This function is called from control event handlers. // --------------------------------------------------------------------- void OnLButtonDown(UINT nFlags, CPoint point); // -------------------------------------------------------------------- // Summary: // This member function is called to process left button up mouse // messages. // Parameters: // nFlags : A UINT that indicates whether various virtual keys are // down. // point : A CPoint object that specifies the x\- and y\- coordinates // of the cursor. // Remarks: // This function is called from control event handlers. // -------------------------------------------------------------------- void OnLButtonUp(UINT nFlags, CPoint point); // -------------------------------------------------------------------- // Summary: // This function is called to process mouse move messages. // Parameters: // nFlags : A UINT that indicates whether various virtual keys are // down. // point : A CPoint object that specifies the x\- and y\- coordinates // of the cursor. // Remarks: // This function is called from control event handlers. // -------------------------------------------------------------------- void OnMouseMove(UINT nFlags, CPoint point); // --------------------------------------------------------------------- // Summary: // This member function is called to process changing cursor message. // Parameters: // point : A CPoint object that specifies the x\- and y\- coordinates // of the cursor. // Remarks: // This function is called from control event handlers. // Returns: // Nonzero to halt further processing, or 0 to continue. // --------------------------------------------------------------------- BOOL OnSetCursor(CPoint point); // ------------------------------------------------------------------------------ // Summary: // Call this member function to calculate sizes and counts by font // metrics. // Parameters: // rcClient : A CRect object that contains the coordinates of the control and // the location where the control is drawn. // Remarks: // This member function implements one of the branches of // AdjustLayout(). If FALSE - The calculated layout depends on // correct display settings of all included items (day items, header // items) and current device context. In this case, the size of one // month item is calculated first, then it determines the count of // month items that fit into the control client rectangle. // See Also: // AdjustLayout() // ------------------------------------------------------------------------------ void ByFontAdjustLayout(CRect rcClient); // --------------------------------------------------------------------------- // Summary: // This member function is used to calculate the size of the header, // days of week, week numbers, and the scrolling triangles bounding // rectangles. // Parameters: // rcClient : A CRect object that contains the coordinates that specifies // where the control is drawn. // Remarks: // This member function implements one of the branches of // AdjustLayout(). If TRUE, then the layout is adjusted depending on // the given control client area rectangle. In this case, the given // count of month items is adjusted to fit the client area. // See Also: // AdjustLayout() // --------------------------------------------------------------------------- void AutoAdjustLayout(CRect rcClient); // Attributes protected: // ----------------------------------------------------------------- // This member variable is a CXTPDatePickerControl object pointer to // the parent control // ----------------------------------------------------------------- CXTPDatePickerControl* m_pControl; // ------------------------------------------------------------- // This member variable is an int that is used for the row month // index. // ------------------------------------------------------------- int m_nRow; // ---------------------------------------------------------------- // This member variable is an int that is used for the column month // index. // ---------------------------------------------------------------- int m_nColumn; // --------------------------------------------------------------- // This member variable is COleDateTime object that is used as the // date with the month definition for the month item. // --------------------------------------------------------------- COleDateTime m_dtMonth; // ------------------------------------------------------------------ // This member variable is a BOOL that is used to determine if the // "days before this month" are visible. The valid values are TRUE if // the "days before this month" are visible, otherwise false. // ------------------------------------------------------------------ BOOL m_bShowDaysBefore; // ----------------------------------------------------------------- // This member variable is a BOOL that is used to indicate if the // "days after this month" are visible. The valid values are TRUE if // the "days after this month" are visible, otherwise FALSE. // ----------------------------------------------------------------- BOOL m_bShowDaysAfter; // --------------------------------------------------------------- // This member variable is a BOOL that is used to determine if the // "left scroll triangle" is visible. The valid values are TRUE if // the "left scroll triangle" is visible, otherwise false. // --------------------------------------------------------------- BOOL m_bShowLeftScroll; // ---------------------------------------------------------------- // This member variable is a BOOL that is used to determine if the // "right scroll triangle" is visible. The valid values are TRUE if // the "right scroll triangle" is visible, otherwise false. // ---------------------------------------------------------------- BOOL m_bShowRightScroll; // -------------------------------------------------------- // This member variable is a CRect object that contains the // coordinates of the total month's area. // -------------------------------------------------------- CRect m_rcMonth; // -------------------------------------------------------- // This member variable is a CRect object that contains the // coordinates of the month's header area. // -------------------------------------------------------- CRect m_rcHeader; // -------------------------------------------------------- // This member variable is a CRect object that contains the // coordinates of the month's "week days" area. // -------------------------------------------------------- CRect m_rcDaysOfWeek; // -------------------------------------------------------- // This member variable is a CRect object that contains the // coordinates of the month's week numbers area. // -------------------------------------------------------- CRect m_rcWeekNumbers; // -------------------------------------------------------- // This member variable is a CRect object that contains the // coordinates of the month's "all days" area. // -------------------------------------------------------- CRect m_rcDaysArea; // -------------------------------------------------------- // This member variable is a CRect object that contains the // coordinates of the left scroll triangle area. // -------------------------------------------------------- CRect m_rcLeftScroll; // -------------------------------------------------------- // This member variable is a CRect object that contains the // coordinates of the right scroll triangle area. // -------------------------------------------------------- CRect m_rcRightScroll; // ----------------------------------------------------------- // This member variable is a CArray\ object that is used as an internal // storage area for the day items. // ----------------------------------------------------------- CArray m_arrDays; private: //{{AFX_CODEJOCK_PRIVATE static void Swap(COleDateTime& dtFirst, COleDateTime& dtSecond); //}}AFX_CODEJOCK_PRIVATE }; AFX_INLINE COleDateTime CXTPDatePickerItemMonth::GetMonth() const { return m_dtMonth; } AFX_INLINE BOOL CXTPDatePickerItemMonth::GetShowDaysBefore() const { return m_bShowDaysBefore; } AFX_INLINE BOOL CXTPDatePickerItemMonth::GetShowDaysAfter() const { return m_bShowDaysAfter; } AFX_INLINE void CXTPDatePickerItemMonth::SetShowDaysBefore(BOOL bShow) { m_bShowDaysBefore = bShow; } AFX_INLINE void CXTPDatePickerItemMonth::SetShowDaysAfter(BOOL bShow) { m_bShowDaysAfter = bShow; } AFX_INLINE BOOL CXTPDatePickerItemMonth::GetShowLeftScroll() const { return m_bShowLeftScroll; } AFX_INLINE BOOL CXTPDatePickerItemMonth::GetShowRightScroll() const { return m_bShowRightScroll; } AFX_INLINE void CXTPDatePickerItemMonth::SetShowScrolling(BOOL bLeftScroll, BOOL bRightScroll) { m_bShowLeftScroll = bLeftScroll; m_bShowRightScroll = bRightScroll; } AFX_INLINE void CXTPDatePickerItemMonth::Swap(COleDateTime& dtFirst, COleDateTime& dtSecond) { COleDateTime dtTemp = dtFirst; dtFirst = dtSecond; dtSecond = dtTemp; } #endif // !defined(_XTPDATEPICKERITEMMONTH_H__)