// XTPCalendarEvents.h: CXTPCalendarEvents template.
//
// 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(_XTPCALENDAREVENTS_H__)
#define _XTPCALENDAREVENTS_H__
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//}}AFX_CODEJOCK_PRIVATE
class CXTPCalendarEvent;
//===========================================================================
// Summary:
// This class represents a simple array collection of CXTPCalendarEvent
// objects.
// Remarks:
// Array indexes always start at position 0.
//
// As with a C array, the access time for indexed element of this
// array is constant and is independent of the array size.
//
// Methods Add(), SetAt(), and Append() call InternalAddRef() for the
// added event.
// Methods Get(), and Find() do not call InternalAddRef() for the returned
// event.
// Methods RemoveAt(), RemoveBy(), RemoveAll(), and the destructor call
// InternalRelease() for the removed events.
//
// See Also: CArray overview, CXTPCalendarEvent overview.
//===========================================================================
class _XTP_EXT_CLASS CXTPCalendarEvents : public CXTPCmdTarget
{
//{{AFX_CODEJOCK_PRIVATE
DECLARE_DYNAMIC(CXTPCalendarEvents)
//}}AFX_CODEJOCK_PRIVATE
public:
//-----------------------------------------------------------------------
// Summary:
// Default collection constructor.
// See Also: ~CXTPCalendarEvents()
//-----------------------------------------------------------------------
CXTPCalendarEvents();
//-----------------------------------------------------------------------
// Summary:
// Default collection destructor.
// Remarks:
// Handles member item deallocation. Decreases reference of all
// stored CXTPCalendarEvent objects.
// See Also: RemoveAll()
//-----------------------------------------------------------------------
virtual ~CXTPCalendarEvents();
//-----------------------------------------------------------------------
// Summary:
// This member function is used to add a new event element to the
// end of an array.
// Parameters:
// pNewEvent - The event element to add to this array.
// bWithAddRef - If this parameter is TRUE, then InternalAddRef()
// is called for the pNewEvent, otherwise InternalAddRef()
// is not called. The default value is TRUE.
// Remarks:
// Use this method to add the specified event pointer to the end
// of the events collection. Reference to the new object is
// increased or decreased depending on the value of the bWithAddRef parameter.
// Example:
//
// // CXTPCalendarEvents - derived class
// CXTPCalendarEvents* pList = new CXTPCalendarEvents();
// CXTPCalendarEventPtr ptrEvent1 = new CXTPCalendarEvent()
//
// // Add() will call InernalAddRef()
// pList->Add(ptrEvent1);
//
// // Add() will not call InernalAddRef()
// pList->Add(new CXTPCalendarEvent(), FALSE);
//
// // GetAt() will call InernalAddRef()
// CXTPCalendarEventPtr ptrEvent0 = pList->GetAt(0, TRUE);
//
// // GetAt() will not call InernalAddRef()
// CXTPCalendarEvent* pEvent1 = pList->GetAt(1);
//
// ASSERT(2 == pList->GetCount());
//
// //RemoveAll() will call InernalRelease() for all objects
// pList->RemoveAll();
//
// ASSERT(0 == pList->GetCount());
//
// See Also: GetAt, RemoveAll, GetCount, CXTPCalendarEvents overview,
// CXTPCalendarEvent overview.
//-----------------------------------------------------------------------
void Add(CXTPCalendarEvent* pNewEvent, BOOL bWithAddRef = TRUE);
//-----------------------------------------------------------------------
// Summary:
// Adds a new events element to the end of an array.
// Parameters:
// pEventsArray - The pointer to the collection of event elements
// to add to this array.
// Remarks:
// Use this method to add event elements from the specified
// array to the end of the events collection. Reference to the
// new object is increased by default. This depends on the array
// constructor parameter. See array constructor
// CXTPCalendarEvents(BOOL bWithAddRefRelease = TRUE);
// Example:
//
// // CXTPCalendarEvents - derived class
// CXTPCalendarEvents arEvents1;
// CXTPCalendarEventsPtr ptrEvents2 = new CXTPCalendarEvents();
// ...
// ptrEvents2->Append(&arEvents1);
//
// See Also: CXTPCalendarEvents overview, GetAt, RemoveAll, GetCount,
// constructor CXTPCalendarEvents, CXTPCalendarEvents overview,
// CXTPCalendarEvents overview, CXTPCalendarEvent overview,
// CXTPCalendarEvent overview
//-----------------------------------------------------------------------
void Append(CXTPCalendarEvents* pEventsArray);
//-----------------------------------------------------------------------
// Summary:
// Call this method to get an event at the specified numeric index.
// Parameters:
// nIndex - An integer index that is greater than or equal to 0
// and less than the value returned by GetCount.
// bWithAddRef - If this parameter is TRUE the InternalAdRef()
// will be called for the returned object,
// otherwise it will not be called.
// The default value is FALSE.
// Remarks:
// Reference to the returned object is increased or not depending on
// bWithAddRef parameter.
// Returns the array element at the specified index.
// Example: See example for CXTPCalendarEvents::Add method.
// Returns:
// The pointer to the CXTPCalendarEvent element currently at this
// index.
//-----------------------------------------------------------------------
CXTPCalendarEvent* GetAt(int nIndex, BOOL bWithAddRef = FALSE) const;
//-----------------------------------------------------------------------
// Summary:
// This member function is used to set a new event element to the
// position specified in the nIndex parameter.
// Parameters:
// nIndex - An integer index that is greater than or equal
// to 0 and less than the value returned by
// GetCount.
// pEvent - The event element to add to this array.
// bWithAddRef - If this parameter is TRUE, then InternalAddRef()
// is called for the pEvent object,
// otherwise InternalAddRef() is not called.
// Remarks:
// Use this method to set the specified event pointer to the
// position specified in the nIndex parameter.
// Reference to the previous object is decreased by default. This
// depends on the array constructor parameter. See the array constructor
// CXTPCalendarEvents(BOOL bWithAddRefRelease = TRUE);
// Reference to the new object is increased or decreased depending
// on the bWithAddRef parameter.
// Example:
//
// // CXTPCalendarEvents - derived class
// CXTPCalendarEvents* pList = new CXTPCalendarEvents();
// CXTPCalendarEventPtr ptrEvent1 = new CXTPCalendarEvent()
//
// pList->Add(ptrEvent1);
// pList->SetAt(0, new CXTPCalendarEvent(), FALSE);
//
// See Also: CXTPCalendarEvents overview,
// constructor CXTPCalendarEvents, CXTPCalendarEvents overview,
// CXTPCalendarEvents overview, CXTPCalendarEvent overview,
// CXTPCalendarEvent overview
//-----------------------------------------------------------------------
void SetAt(int nIndex, CXTPCalendarEvent* pEvent, BOOL bWithAddRef = TRUE);
//-----------------------------------------------------------------------
// Summary:
// Inserts an element at a specified index.
// Parameters:
// nIndex - An integer index that is greater than or equal to 0
// and may be greater than the value returned by GetCount.
// pEvent - Pointer to the event to insert.
// bWithAddRef - Set this value to TRUE to increment the reference count of the inserted object,
// FALSE to insert object without incrementing reference count.
// Default value is TRUE.
// Remarks:
// Inserts one element at a specified index in an array. In the process,
// it shifts up (by incrementing the index) the existing element at
// this index, and it shifts up all the elements above it.
// See Also: CXTPCalendarEvents overview
//-----------------------------------------------------------------------
void InsertAt(int nIndex, CXTPCalendarEvent* pEvent, BOOL bWithAddRef = TRUE);
//-----------------------------------------------------------------------
// Summary:
// Removes an element of the specified index from this array.
// Parameters:
// nIndex - An integer index that is greater than or equal to 0
// and less than the value returned by GetCount.
// Remarks:
// Removes the pointer from this array. Reference to the removed
// object is decreased by default.
// See Also: CXTPCalendarEvents overview
//-----------------------------------------------------------------------
void RemoveAt(int nIndex);
//-----------------------------------------------------------------------
// Summary:
// This member function is used to obtain the number of
// CXTPCalendarEvent elements in this collection.
// Remarks:
// Call this method to retrieve the number of elements in the array.
// Because indexes are zero-based, the size is 1 greater than
// the largest index.
// Example: See example for CXTPCalendarEvents::Add method.
// Returns:
// An int that contains the number of items in the collection.
// See Also: CXTPCalendarEvents overview
//-----------------------------------------------------------------------
int GetCount() const;
//-----------------------------------------------------------------------
// Summary:
// Set size of the array.
// Parameters:
// nNewSize - A new array size (elements count).
// nGrowBy - Amount of elements to grow array when Add and InsertAt
// methods used. -1 (by default) means using default
// parameter value.
// See Also:
// GetCount, RemoveAll
//-----------------------------------------------------------------------
void SetSize(int nNewSize, int nGrowBy = -1);
//-----------------------------------------------------------------------
// Summary:
// This function is used to remove all of the elements from this array.
// Remarks:
// Removes all of the pointers from this array. Reference to
// removed objects are decreased by default.
// Example: See example for CXTPCalendarEvents::Add method.
// See Also: CXTPCalendarEvents overview
//-----------------------------------------------------------------------
void RemoveAll();
//-----------------------------------------------------------------------
// Summary:
// This method is used to find an event using the EventID in this array.
// Parameters:
// dwEventID - A DWORD that contains the unique event ID.
// pFEvent - A pointer to a CXTPCalendarEvent object that
// contains the event object.
// Remarks:
// When using dwEventID -
// This method searches this collection for the first match of
// an event object with event ID equal to dwEventID.
// When using pFEvent -
// This method searches this collection for the first match of
// a event object with identifiers equal to identifiers of
// the pFEvent. If there are no recurrence events, then these
// are Event IDs. For recurrence events, then these are
// RecurrencePatternID, Start/End times, or
// RException_StartTimeOrig/RException_EndTimeOrig.
// For details see implementation CXTPCalendarEvent::IsEqualIDs()
// Example:
//
// // CXTPCalendarEvents - derived class
// CXTPCalendarEvents arEvents;
// CXTPCalendarEvent* pEvent;
// ...
// if (arEvents.Find(pEvent->GetEventID()) < 0) {
// arEvents.Add(pEvent);
// }
//
// Returns:
// The zero-based index of the first event in the collection
// that matches the requested dwEventID.
// -1 if the event is not found.
// See Also: CXTPCalendarEvents overview,
// constructor CXTPCalendarEvents, CXTPCalendarEvents overview,
// CXTPCalendarEvents overview, CXTPCalendarEvent overview,
// CXTPCalendarEvent overview
//-----------------------------------------------------------------------
int Find(CXTPCalendarEvent* pFEvent) const;
int Find(DWORD dwEventID) const; //
//-----------------------------------------------------------------------
// Summary:
// This member function is used to find an event using the EventID
// in this array.
// Parameters:
// dwEventID - A DWORD that contains the unique event ID.
// pFEvent - A CXTPCalendarEvent pointer that contains the
// event object to compare.
// Remarks:
// When using dwEventID -
// This method searches this collection for the first match of
// a event object with event ID equal to dwEventID.
// Reference to the returned object is not increased.
// When using pFEvent -
// This method searches this collection for the first match of
// a event object with identifiers equal to identifiers of
// the pFEvent. In the case of no recurrence events these
// are EventIDs. In the case of recurrence events these are
// RecurrencePatternIDs, Start/End times or
// RException_StartTimeOrig/RException_EndTimeOrig.
// For details see implementation CXTPCalendarEvent::IsEqualIDs()
// Reference to the returned object is not increased by default.
// Example:
//
// // CXTPCalendarEvents - derived class
// CXTPCalendarEvents arEvents;
// CXTPCalendarEvent* pEvent;
// ...
// CXTPCalendarEvent* pEvent2;
// pEvent2 = arEvents.Find(pEvent->GetEventID());
// if (pEvent2) {
// pEvent2.Update(pEvent);
// }
//
// Returns:
// The pointer to the first event in the collection
// that matches the requested dwEventID;
// NULL if the event is not found.
// See Also: CXTPCalendarEvents overview, CXTPCalendarEvent overview,
//-----------------------------------------------------------------------
CXTPCalendarEvent* FindEvent(DWORD dwEventID) const;
CXTPCalendarEvent* FindEvent(CXTPCalendarEvent* pFEvent) const; //
//-----------------------------------------------------------------------
// Summary:
// This member function is used to find and remove an event using
// EventID in this array.
// Parameters:
// dwEventID - A DWORD containing a unique event ID.
// Remarks:
// This method searches this collection for the first match of
// an event object with the event ID equal to dwEventID and removes
// the object from the collection..
// Example:
//
// // CXTPCalendarEvents - derived class
// CXTPCalendarEvents arEvents;
// DWORD dwEventIDToRemove;
// ...
// if (arEvents.RemoveByID(dwEventIDToRemove) < 0) {
// ...
// }
//
// Returns:
// TRUE - if the event is found and removed.
// FALSE - if the event is not found.
// See Also: CXTPCalendarEvents overview,
// constructor CXTPCalendarEvents, CXTPCalendarEvents overview,
// CXTPCalendarEvents overview, CXTPCalendarEvent overview,
// CXTPCalendarEvent overview
//-----------------------------------------------------------------------
BOOL RemoveByID(DWORD dwEventID);
//-----------------------------------------------------------------------
// Summary:
// Clone events in the collection.
// Remarks:
// This function pointer is used to replace events objects to their clones.
// If there is not enough memory to clone some events they are
// removed from the collection.
// See Also: CXTPCalendarEvent::CloneEvent()
//-----------------------------------------------------------------------
void CloneEvents();
//-----------------------------------------------------------------------
// Summary:
// Define a function pointer for comparing events.
// Prameters:
// ppEv1 - Pointer to calender event pointer(first event).
// ppEv2 - Pointer to calender event pointer(second event).
// Remarks:
// This function pointer is used in the Sort method.
// See Also: Sort method, CompareEvents_ForView function,
// CompareEvents_ByID function
//-----------------------------------------------------------------------
typedef int (_cdecl* T_CompareFunc)(const CXTPCalendarEvent** ppEv1, const CXTPCalendarEvent** ppEv2);
//-----------------------------------------------------------------------
// Summary:
// This member function is used to sort events in this array.
// Parameters:
// pCompareFunc - A T_CompareFunc function pointer that is used
// to compare events.
// Remarks:
// This method sorts events in this collection using specified
// compare events function. The QuickSort algorithm is used.
// Example:
//
// CXTPCalendarEvents - derived class
// CXTPCalendarEvents arEvents;
// ...
// arEvents.Sort(CompareEvents_ForView);
// ...
//
// See Also: CXTPCalendarEvents overview,
// CXTPCalendarEvents overview, CXTPCalendarEvents overview,
// CXTPCalendarEvent overview, CXTPCalendarEvent overview,
// CompareEvents_ForView function, CompareEvents_ByID function,
// qsort() function in the stdlib.h
//-----------------------------------------------------------------------
void Sort(T_CompareFunc pCompareFunc);
//-----------------------------------------------------------------------
// Summary:
// This member function is used to compare specified events so that
// the events are displayed properly in the event's views.
// Parameters:
// ppEv1 - Pointer to the first event pointer.
// ppEv2 - Pointer to the second event pointer.
// Remarks:
// This function is used as a parameter for the Sort method to sort
// events in the order needed to display the events in the event's views.
// Example: See example for CXTPCalendarEvents::Sort method.
//-----------------------------------------------------------------------
static int _cdecl CompareEvents_ForView(const CXTPCalendarEvent** ppEv1, const CXTPCalendarEvent** ppEv2);
//-----------------------------------------------------------------------
// Summary:
// This member function is used to compare specified events so that
// the events are displayed properly in the event's views.
// extra function for sort
// Parameters:
// ppEv1 - Pointer to the first event pointer.
// ppEv2 - Pointer to the second event pointer.
// Remarks:
// This function is used as a parameter for the Sort method to sort
// events in the order needed to display the events in the event's views.
// Example: See example for CXTPCalendarEvents::Sort method.
//-----------------------------------------------------------------------
static int _cdecl CompareEvents_ForViewByStart(const CXTPCalendarEvent** ppEv1, const CXTPCalendarEvent** ppEv2);
//-----------------------------------------------------------------------
// Summary:
// This member function is used to compare specified events by
// the event's IDs.
// Parameters:
// ppEv1 - Pointer to the first event pointer.
// ppEv2 - Pointer to the second event pointer.
// Remarks:
// This function is used as a parameter for the Sort method to sort
// events using EventIDs in ascending order. This is useful for
// performing a fast search for an event ID.
// Example: See example for CXTPCalendarEvents::Sort method.
// See Also: method CXTPCalendarEvents::Sort overview,
// CompareEvents_ForView function
//-----------------------------------------------------------------------
static int _cdecl CompareEvents_ByID(const CXTPCalendarEvent** ppEv1, const CXTPCalendarEvent** ppEv2);
protected:
CArray m_arEvents; // An internal storage for CXTPCalendarEvent pointers.
};
/////////////////////////////////////////////////////////////////////////////
AFX_INLINE int CXTPCalendarEvents::GetCount() const {
return (int)m_arEvents.GetSize();
}
AFX_INLINE void CXTPCalendarEvents::SetSize(int nNewSize, int nGrowBy) {
m_arEvents.SetSize(nNewSize, nGrowBy);
}
AFX_INLINE BOOL CXTPCalendarEvents::RemoveByID(DWORD dwEventID) {
int nFIndex = Find(dwEventID);
if (nFIndex >= 0) {
RemoveAt(nFIndex);
}
return (nFIndex >= 0);
}
#endif // !defined(_XTPCALENDAREVENTS_H__)