Hi,
this is the sort function used inside, e.g. Populate call
int _cdecl CXTPCalendarEvents::CompareEvents_ForView(const CXTPCalendarEvent** ppEv1, const CXTPCalendarEvent** ppEv2)
{
if (*ppEv1 == NULL || *ppEv2 == NULL)
{
ASSERT(FALSE);
return XTPCompare(*ppEv1, *ppEv2);
}
int nPeriodDays1 = (*ppEv1)->GetEventPeriodDays();
int nPeriodDays2 = (*ppEv2)->GetEventPeriodDays();
int nAllDayEvent1 = (*ppEv1)->IsAllDayEvent() ? 1 : 0;
int nAllDayEvent2 = (*ppEv2)->IsAllDayEvent() ? 1 : 0;
BOOL bIsMultidayEvent = (nAllDayEvent1 && nAllDayEvent2 || nPeriodDays1 > 1 && nPeriodDays2 > 1);
int nCmp = 0;
//---------------------------------------------------------------------------
if (bIsMultidayEvent)
{
nCmp = XTPCompare((*ppEv1)->GetStartTime(), (*ppEv2)->GetStartTime());
if (nCmp)
{
return nCmp;
}
}
//---------------------------------------------------------------------------
nCmp = XTPCompare(nPeriodDays2, nPeriodDays1);
if (nCmp)
{
return nCmp;
}
nCmp = XTPCompare(nAllDayEvent2, nAllDayEvent1);
if (nCmp)
{
return nCmp;
}
if (!bIsMultidayEvent)
{
nCmp = XTPCompare((*ppEv1)->GetStartTime(), (*ppEv2)->GetStartTime());
if (nCmp)
{
return nCmp;
}
}
nCmp = XTPCompare((*ppEv1)->GetDurationMinutes(), (*ppEv2)->GetDurationMinutes());
if (nCmp)
{
return -nCmp;
}
//-----------------------------------------------------
nCmp = XTPCompare((*ppEv1)->GetSubject(), (*ppEv2)->GetSubject());
if (nCmp)
{
return nCmp;
}
//-----------------------------------------------------
nCmp = CompareEvents_ByID(ppEv1, ppEv2);
return nCmp;
}
virtual void Populate(COleDateTime dtDayDate)
{
.............................................
CXTPCalendarEventsPtr ptrEventsAr = new CXTPCalendarEvents();
............................................
// sort events by start time and some other criteria
ptrEventsAr->Sort(CXTPCalendarEvents::CompareEvents_ForView);
May be we can make this call optional?
Now looks like there is no way to eliminate this sort.
|