You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

221 lines
8.2 KiB
C++

// XTPDatePickerDaysCollection.h: interface for the CXTPDatePickerDaysCollection 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(_XTPDATEPICKERDAYSCOLLECTION_H__)
#define _XTPDATEPICKERDAYSCOLLECTION_H__
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//}}AFX_CODEJOCK_PRIVATE
// XTPDatePickerDaysCollection.h : header file
///
class CXTPDatePickerControl;
class CXTPDatePickerItemDay;
// ----------------------------------------------------------------------
// Remarks:
// Class CXTPDatePickerDaysCollection provides facilities to build various
// collection of days, for using in groups. For example, the selected days
// collection. To create an object of this class, simply call the constructor
// and provide a pointer to the DatePicker controller.
// ----------------------------------------------------------------------
class _XTP_EXT_CLASS CXTPDatePickerDaysCollection : public CXTPCmdTarget
{
friend class CXTPDatePickerControl;
public:
//-----------------------------------------------------------------------
// Summary:
// Selected block structure.
// Each member is represented by an integer part of a corresponding
// COleDateTime value.
// Example:
// You can create COleDateTime in a following manner:
// <code>
// COleDateTime dtValue;
// dtValue = (DATE)(double)block.nDateBegin;
// </code>
//-----------------------------------------------------------------------
struct SELECTED_BLOCK
{
long nDateBegin; // Begin date
long nDateEnd; // End date
};
public:
//-----------------------------------------------------------------------
// Summary:
// Default collection constructor.
// Parameters:
// pControl - Pointer to the DatePicker control object.
// Remarks:
// Handles initial initialization.
//-----------------------------------------------------------------------
CXTPDatePickerDaysCollection(CXTPDatePickerControl* pControl);
// -------------------------------------
// Summary:
// Default collection destructor.
// Remarks:
// Handles member item deallocation.
// See Also:
// Clear()
// -------------------------------------
virtual ~CXTPDatePickerDaysCollection();
//-----------------------------------------------------------------------
// Summary:
// Call this member function to clear the day collection.
//-----------------------------------------------------------------------
void Clear();
// ---------------------------------------------------------------------
// Summary:
// Call this member function to add a day to the collection.
// Parameters:
// dtDay : Date of a day, the key of the new element.
// Remarks:
// The primary means to insert an element into a map. First, search
// for the key. If the key is found, then the corresponding value is
// changed. Otherwise, a new key-value pair is created an added to
// the map.
// See Also:
// Remove
// ---------------------------------------------------------------------
void Add(const COleDateTime& dtDay);
// ---------------------------------------------------------------------
// Summary:
// Call this member function to select a day
// Parameters:
// dtDay : Date of a day, the key of the new element.
// See Also:
// Add, SelectRange
// ---------------------------------------------------------------------
void Select(const COleDateTime& dtDay);
// ---------------------------------------------------------------------
// Summary:
// Call this member function to select days
// Parameters:
// dtDayBegin : First Date of a day
// dtDayEnd : Last Date of a day
// See Also:
// Select
// ---------------------------------------------------------------------
void SelectRange(const COleDateTime& dtDayBegin, const COleDateTime& dtDayEnd);
// --------------------------------------------------------------------------
// Summary:
// Call this member function to remove a day from the collection.
// Parameters:
// dtDay : A COleDateTime reference that contains the date of a day. The
// key for the element to be removed.
// Remarks:
// Searches the map for the entry corresponding to the supplied key.
// If the key is found, then the entry is removed.
// See Also:
// Add(COleDateTime&)
// --------------------------------------------------------------------------
void Remove(const COleDateTime& dtDay);
//-----------------------------------------------------------------------
// Summary:
// Call this member function to determine if a day is contained in
// the collection.
// Parameters:
// dtDay - Date of a day. The key that identifies the element to
// search for.
// Remarks:
// This function uses a hash algorithm to quickly find the map
// element using a key that exactly matches the given key.
// Returns:
// Nonzero if the element was found. Otherwise 0.
//-----------------------------------------------------------------------
BOOL Contains(const COleDateTime& dtDay) const;
//-----------------------------------------------------------------------
// Summary:
// Call this member function to count the number of days in the
// collection.
// Returns:
// An integer value representing the number of day items in
// the collection.
//-----------------------------------------------------------------------
int GetSelectedDaysCount() const;
//-----------------------------------------------------------------------
// Summary:
// Call this member function to count the number of selected blocks.
// Returns:
// An integer value representing the number of selected blocks.
//-----------------------------------------------------------------------
int GetSelectedBlocksCount() const;
//-----------------------------------------------------------------------
// Summary:
// Call this member function to get the selected block by its index.
// Parameters:
// nIndex - Selected block to retrieve.
// Returns:
// An enumerated value specifying the selected block.
//-----------------------------------------------------------------------
SELECTED_BLOCK GetSelectedBlock(int nIndex) const;
// -----------------------------------------------------------------------
// Summary:
// Call this member function to determine the minimum and the maximum
// day in the collection.
// Parameters:
// refMinRange : A COleDateTime reference to the minimum date storage
// variable.
// refMaxRange : A COleDateTime reference to maximum date storage
// variable.
// Returns:
// A boolean value. TRUE if successful. Otherwise FALSE.
// -----------------------------------------------------------------------
BOOL GetMinMaxRange(COleDateTime& refMinRange, COleDateTime& refMaxRange) const;
private:
void _InsertBlock(int nIndexInsert, long nDateBegin, long nDateEnd);
void AddBlock(long nBegin, long nEnd);
// Attributes
protected:
CXTPDatePickerControl* m_pControl; // This member variable is a pointer to the parent control.
CArray<SELECTED_BLOCK, SELECTED_BLOCK&> m_arrSelectedBlocks; // Contains an array of the selected dates blocks.
};
AFX_INLINE int CXTPDatePickerDaysCollection::GetSelectedBlocksCount() const {
return (int)m_arrSelectedBlocks.GetSize();
}
AFX_INLINE CXTPDatePickerDaysCollection::SELECTED_BLOCK CXTPDatePickerDaysCollection::GetSelectedBlock(int nIndex) const {
ASSERT(nIndex >= 0 && nIndex < (int)m_arrSelectedBlocks.GetSize());
return m_arrSelectedBlocks[nIndex];
}
#endif // !defined(_XTPDATEPICKERDAYSCOLLECTION_H__)