void CXTPDatePickerItemMonth::OnLButtonDown(UINT nFlags, CPoint point) { if (!m_pControl) return; BOOL bMultiselect = !!(nFlags & MK_CONTROL) || m_pControl->IsMultiSelectionMode(); // check left scroll item if (m_bShowLeftScroll && !m_rcLeftScroll.IsRectEmpty() && m_rcLeftScroll.PtInRect(point)) { m_pControl->m_mouseMode = CXTPDatePickerControl::mouseScrollingLeft; m_pControl->m_nTimerID = (UINT)m_pControl->SetTimer(XTP_DATEPICKER_TIMERID, XTP_DATEPICKER_TIMER_INTERVAL, NULL); if (m_pControl->m_bYearsTriangle) { if (point.x < m_rcLeftScroll.left + 9) { if (m_dtMonth.GetYear() >= 100 || (m_dtMonth.GetYear() == 100 && m_dtMonth.GetMonth() >= 3)) m_pControl->ScrollLeft(m_pControl->GetMonthDelta()); } else if (point.x > m_rcLeftScroll.right - 9) { if (m_dtMonth.GetYear() >= 101 || (m_dtMonth.GetYear() == 101 && m_dtMonth.GetMonth() >= 3)) m_pControl->ScrollLeft(12 * m_pControl->GetMonthDelta()); } } else { m_pControl->ScrollLeft(m_pControl->GetMonthDelta()); } return; } // check right scroll item if (m_bShowRightScroll && !m_rcRightScroll.IsRectEmpty() && m_rcRightScroll.PtInRect(point)) { m_pControl->m_mouseMode = CXTPDatePickerControl::mouseScrollingRight; m_pControl->m_nTimerID = (UINT)m_pControl->SetTimer(XTP_DATEPICKER_TIMERID, XTP_DATEPICKER_TIMER_INTERVAL, NULL); if (m_pControl->m_bYearsTriangle) { if (point.x < m_rcRightScroll.left + 9) m_pControl->ScrollRight(12 * m_pControl->GetMonthDelta()); else if (point.x > m_rcLeftScroll.right - 9) m_pControl->ScrollRight(m_pControl->GetMonthDelta()); } else { m_pControl->ScrollRight(m_pControl->GetMonthDelta()); } return; } // check header click if (!m_rcHeader.IsRectEmpty() && CRect(m_rcHeader.left + 20, m_rcHeader.top, m_rcHeader.right - 20, m_rcHeader.bottom).PtInRect(point)) //m_rcHeader.PtInRect(point)) { // call month popup list m_pControl->ShowListHeader(m_rcHeader, m_dtMonth); return; } // check week numbers click m_pControl->m_bSelectWeek = !m_rcWeekNumbers.IsRectEmpty() && m_rcWeekNumbers.PtInRect(point); CPoint ptFirstWeekDay(point); ptFirstWeekDay.x = m_rcWeekNumbers.right + 3; // check day item CXTPDatePickerItemDay* pDay = HitTest(m_pControl->m_bSelectWeek ? ptFirstWeekDay : point, FALSE); if (pDay) { m_pControl->ClearFocus(); BOOL bAllowNoncontinuousSelection = m_pControl->IsAllowNoncontinuousSelection(); COleDateTime dtDay(pDay->GetDate()); BOOL bSelected = m_pControl->IsSelected(dtDay); if (m_pControl->m_bSelectWeek) { //week is selected only when all week days are selected for (int i = 0; i < 7; i++) { COleDateTime dtDay_i = dtDay + COleDateTimeSpan(i, 0, 0, 0); bSelected &= m_pControl->IsSelected(dtDay_i); } } if (bSelected && bMultiselect && bAllowNoncontinuousSelection) m_pControl->m_mouseMode = CXTPDatePickerControl::mouseDeselecting; else m_pControl->m_mouseMode = CXTPDatePickerControl::mouseSelecting; if (!bMultiselect || !bAllowNoncontinuousSelection) m_pControl->m_pSelectedDays->Clear(); if (nFlags & MK_SHIFT) { if (m_pControl->m_dtFirstClicked.GetStatus() == COleDateTime::valid) { m_pControl->m_dtLastClicked = dtDay; } else if (m_pControl->m_dtLastClicked.GetStatus() == COleDateTime::valid) { m_pControl->m_dtFirstClicked = m_pControl->m_dtLastClicked; m_pControl->m_dtLastClicked = dtDay; } else if (m_pControl->GetSelRange(m_pControl->m_dtFirstClicked, m_pControl->m_dtLastClicked)) { if (m_pControl->m_dtFirstClicked < dtDay) m_pControl->m_dtLastClicked = dtDay; else m_pControl->m_dtFirstClicked = dtDay; } else { m_pControl->m_dtFirstClicked = dtDay; m_pControl->m_dtLastClicked = dtDay; } } else { m_pControl->m_dtFirstClicked = dtDay; m_pControl->m_dtLastClicked = m_pControl->m_bSelectWeek ? dtDay + COleDateTimeSpan(6, 0, 0, 0) : dtDay; } m_pControl->_RedrawControl(FALSE); } }
void CDxDatePickerMonth::OnLButtonDown(UINT nFlags, CPoint point) { if (!m_pControl) return; // check left scroll item if (m_bShowLeftScroll && !m_rcLeftScroll.IsRectEmpty() && m_rcLeftScroll.PtInRect(point)) { m_pControl->m_mouseMode = CDxMonthPicker::mouseScrollingLeft; if (m_pControl->m_bYearsTriangle) { if (point.x < m_rcLeftScroll.left + 9) { if (m_dtMonth.GetYear() >= 100 || (m_dtMonth.GetYear() == 100 && m_dtMonth.GetMonth() >= 3)) m_pControl->ScrollLeft(m_pControl->GetMonthDelta()); } else if (point.x > m_rcLeftScroll.right - 9) { if (m_dtMonth.GetYear() >= 101 || (m_dtMonth.GetYear() == 101 && m_dtMonth.GetMonth() >= 3)) m_pControl->ScrollLeft(12 * m_pControl->GetMonthDelta()); } } else { m_pControl->ScrollLeft(m_pControl->GetMonthDelta()); } return; } // check right scroll item if (m_bShowRightScroll && !m_rcRightScroll.IsRectEmpty() && m_rcRightScroll.PtInRect(point)) { m_pControl->m_mouseMode = CDxMonthPicker::mouseScrollingRight; if (m_pControl->m_bYearsTriangle) { if (point.x < m_rcRightScroll.left + 9) m_pControl->ScrollRight(12 * m_pControl->GetMonthDelta()); else if (point.x > m_rcLeftScroll.right - 9) m_pControl->ScrollRight(m_pControl->GetMonthDelta()); } else { m_pControl->ScrollRight(m_pControl->GetMonthDelta()); } return; } // check header click if (!m_rcHeader.IsRectEmpty() && CRect(m_rcHeader.left + 20, m_rcHeader.top, m_rcHeader.right - 20, m_rcHeader.bottom).PtInRect(point)) { // call month popup list //m_pControl->ShowListHeader(m_rcHeader, m_dtMonth); return; } // check week numbers click m_pControl->m_bSelectWeek = !m_rcWeekNumbers.IsRectEmpty() && m_rcWeekNumbers.PtInRect(point); CPoint ptFirstWeekDay(point); ptFirstWeekDay.x = m_rcWeekNumbers.right + 3; // check day item CDxDatePickerDay* pDay = HitTest(m_pControl->m_bSelectWeek ? ptFirstWeekDay : point, FALSE); if (pDay) { COleDateTime dtDay(pDay->GetDate()); BOOL bSelected = m_pControl->IsSelected(dtDay); if (m_pControl->m_bSelectWeek) { // week is selected only when all week days are selected for (int i = 0; i < 7; i++) { COleDateTime dtDay_i = dtDay + COleDateTimeSpan(i, 0, 0, 0); bSelected &= m_pControl->IsSelected(dtDay_i); } } m_pControl->m_mouseMode = CDxMonthPicker::mouseSelecting; m_pControl->m_dtFSelBase = dtDay; m_pControl->NotifyInvalidate(); } }