void CBCGPPlannerViewMonth::SetDateInterval (const COleDateTime& date1, const COleDateTime& date2) { ASSERT (date1 <= date2); COleDateTimeSpan duration (date2 - date1); m_nDuration = ((int)(duration.GetTotalDays () / 7.0)) * 7; if (m_nDuration < duration.GetTotalDays ()) { m_nDuration += 7; } if (m_nDuration < 14) { m_nDuration = 14; } else if (m_nDuration > 42) { m_nDuration = 42; } COleDateTime _date1 (date1); if (IsCompressWeekend () && CBCGPPlannerManagerCtrl::GetFirstDayOfWeek () == 0) { _date1 += COleDateTimeSpan (1, 0, 0, 0); } m_DateStart = GetFirstWeekDay2 (_date1, CBCGPPlannerManagerCtrl::GetFirstDayOfWeek () + 1); m_DateEnd = m_DateStart + COleDateTimeSpan (m_nDuration - 1, 23, 59, 59); if (m_DateEnd < m_Date || m_Date < m_DateStart) { m_Date = m_DateStart; } SetDate (m_Date); }
COleDateTime CBCGPPlannerPrintMonth::GetFirstWeekDay2 (const COleDateTime& date, int nWeekStart) const { return CBCGPPlannerView::GetFirstWeekDay (date, (IsCompressWeekend () && nWeekStart == 1) ? 2 : nWeekStart); }
void CBCGPPlannerPrintMonth::OnDrawHeader (CDC* pDC, const CRect& rectHeader) { ASSERT_VALID (pDC); const int dxColumn = m_ViewRects [0].Width (); CRect rectDayCaption (rectHeader); DrawHeader (pDC, rectDayCaption, dxColumn); rectDayCaption.right = rectDayCaption.left + dxColumn; COleDateTime day ( GetFirstWeekDay2 (m_Date, CBCGPPlannerManagerCtrl::GetFirstDayOfWeek () + 1) ); const int nEnd = m_bCompressWeekend ? 6 : 7; CStringArray sa; sa.SetSize (nEnd); int iColumn = 0; for (iColumn = 0; iColumn < nEnd; iColumn++) { CString strDate; if (IsCompressWeekend () && day.GetDayOfWeek () == 7) { for (int i = 0; i < 2; i++) { CString strTemp; strTemp.GetBuffer (_MAX_PATH); SYSTEMTIME st; day.GetAsSystemTime (st); ::GetDateFormat (LOCALE_USER_DEFAULT, 0, &st, _T("ddd"), (LPTSTR)(LPCTSTR)strTemp, _MAX_PATH); strTemp.ReleaseBuffer (); strDate += strTemp; if (i == 0) { strDate += _T("/"); } day += COleDateTimeSpan (1, 0, 0, 0); } } else { strDate.GetBuffer (_MAX_PATH); SYSTEMTIME st; day.GetAsSystemTime (st); ::GetDateFormat (LOCALE_USER_DEFAULT, 0, &st, m_strCaptionFormat, (LPTSTR)(LPCTSTR)strDate, _MAX_PATH); strDate.ReleaseBuffer (); day += COleDateTimeSpan (1, 0, 0, 0); } sa.SetAt (iColumn, strDate); } for (iColumn = 0; iColumn < nEnd; iColumn++) { DrawCaption (pDC, rectDayCaption, sa[iColumn], TRUE, TRUE, m_brGray); rectDayCaption.OffsetRect (dxColumn + m_OnePoint.cx, 0); } }
void CBCGPPlannerPrintMonth::OnDrawWeekBar (CDC* pDC, const CRect& rectBar) { if (rectBar.IsRectEmpty ()) { return; } ASSERT_VALID (pDC); const int nRows = GetViewDuration () / 7; const BOOL bDateBeforeMonth = CBCGPPlannerView::IsDateBeforeMonth (); CStringArray saFormat; { CString strMonthFmt (_T("MMM")); CString strSep (_T(" ")); CFont* pOldFont = pDC->SelectObject (&m_Font); CSize szText (pDC->GetTextExtent (_T("AAA 00 - AAA 00"))); CRect rect (m_ViewRects[0]); rect.right = rectBar.right; rect.left = rectBar.left - m_OnePoint.cy; rect.top += m_nRowHeight + m_OnePoint.cy; if (rect.Height() < (szText.cx * 1.5)) { strMonthFmt = _T("M"); strSep = CBCGPPlannerView::GetDateSeparator (); } pDC->SelectObject (pOldFont); CString strFormat; if (bDateBeforeMonth) { strFormat = _T("d") + strSep + strMonthFmt; saFormat.Add (_T("d")); saFormat.Add (strFormat); saFormat.Add (strFormat); } else { strFormat = strMonthFmt + strSep + _T("d"); saFormat.Add (strFormat); saFormat.Add (_T("d")); saFormat.Add (strFormat); } } COLORREF clrTextOld = pDC->SetTextColor (m_clrText); CFont* pOldFont = pDC->SelectObject (&m_FontVert); CPen* pOldPen = pDC->SelectObject (&m_penBlack); COleDateTime day1 (GetDateStart ()); COleDateTime day2 (day1); day2 += COleDateTimeSpan (6, 0, 0, 0); COleDateTimeSpan span (7, 0, 0, 0); int nIndex = 0; if (IsCompressWeekend () && m_ViewRects[0].top != m_ViewRects[1].top) { nIndex = 2; } for (int iRow = 0; iRow < nRows; iRow++) { CRect rect (m_ViewRects[nIndex]); rect.right = rectBar.right; rect.left = rectBar.left - m_OnePoint.cy; rect.top += m_nRowHeight + m_OnePoint.cy; if (rect.top < rect.bottom) { pDC->FillRect (rect, &m_brGray); pDC->MoveTo (rect.right, rect.top); pDC->LineTo (rect.left, rect.top); pDC->LineTo (rect.left, rect.bottom); pDC->LineTo (rect.right, rect.bottom); rect.DeflateRect (m_OnePoint.cx, m_OnePoint.cy); SYSTEMTIME st1; day1.GetAsSystemTime (st1); SYSTEMTIME st2; day2.GetAsSystemTime (st2); CString strDate1; CString strDate2; if (day1.GetMonth () == day2.GetMonth ()) { strDate1.GetBuffer (_MAX_PATH); ::GetDateFormat (LOCALE_USER_DEFAULT, 0, &st1, saFormat[0], (LPTSTR)(LPCTSTR)strDate1, _MAX_PATH); strDate1.ReleaseBuffer (); strDate2.GetBuffer (_MAX_PATH); ::GetDateFormat (LOCALE_USER_DEFAULT, 0, &st2, saFormat[1], (LPTSTR)(LPCTSTR)strDate2, _MAX_PATH); strDate2.ReleaseBuffer (); } else { strDate1.GetBuffer (_MAX_PATH); ::GetDateFormat (LOCALE_USER_DEFAULT, 0, &st1, saFormat[2], (LPTSTR)(LPCTSTR)strDate1, _MAX_PATH); strDate1.ReleaseBuffer (); strDate2.GetBuffer (_MAX_PATH); ::GetDateFormat (LOCALE_USER_DEFAULT, 0, &st2, saFormat[2], (LPTSTR)(LPCTSTR)strDate2, _MAX_PATH); strDate2.ReleaseBuffer (); } CString strText = strDate1 + _T(" - ") + strDate2; CSize szText (pDC->GetTextExtent (strText)); CRect rectText (rect); rectText.left = rectText.left + (rect.Width () - szText.cy + m_OnePoint.cx) / 2; rectText.top = rectText.bottom; if (szText.cx < rect.Height ()) { rectText.top -= (rect.Height () - szText.cx + m_OnePoint.cy) / 2; } rectText.bottom = rect.top; pDC->DrawText (strText, rectText, DT_SINGLELINE); } nIndex += 7; day1 += span; day2 += span; } pDC->SelectObject (pOldPen); pDC->SelectObject (pOldFont); pDC->SetTextColor (clrTextOld); }
void CBCGPPlannerPrintMonth::AdjustRects () { const int nDays = GetViewDuration (); const int nRows = nDays / 7; const int dxColumn = CBCGPPlannerView::round (m_rectApps.Width () / (m_bCompressWeekend ? 6.0 : 7.0)) - m_OnePoint.cx; const int dxRow = CBCGPPlannerView::round (m_rectApps.Height () / (double)nRows) - m_OnePoint.cy; const int nDayStart = (IsCompressWeekend () && CBCGPPlannerManagerCtrl::GetFirstDayOfWeek () == 0) ? 1 : CBCGPPlannerManagerCtrl::GetFirstDayOfWeek (); for (int iRow = 0; iRow < nRows; iRow++) { CRect rect (m_rectApps); rect.right = rect.left + dxColumn; rect.top += iRow * (dxRow + m_OnePoint.cy); rect.bottom = iRow == (nRows - 1) ? rect.bottom : rect.top + dxRow; int nTop = rect.top; int nBottom = rect.bottom; for (int iDay = 0; iDay < 7; iDay++) { int nWeekDay = nDayStart + iDay - 7; if (m_bCompressWeekend) { if (nWeekDay == -1) { if (iDay == 5) { rect.right = m_rectApps.right; } rect.bottom = rect.top + dxRow / 2; } else if (nWeekDay == 0) { rect.top = rect.bottom + m_OnePoint.cy; rect.bottom = nBottom; } else { rect.top = nTop; } } else { if (iDay == 6) { rect.right = m_rectApps.right; } } m_ViewRects.Add (rect); if ((m_bCompressWeekend && nWeekDay != -1) || !m_bCompressWeekend) { rect.OffsetRect (dxColumn + m_OnePoint.cx, 0); } } } }
void CBCGPPlannerViewMonth::AdjustRects () { const int nDays = GetViewDuration (); const int nRows = nDays / 7; const int dxColumn = CBCGPPlannerView::round (m_rectApps.Width () / (m_bCompressWeekend ? 6.0 : 7.0)) - 1; const int dxRow = CBCGPPlannerView::round (m_rectApps.Height () / (double)nRows) - 1; const int nDayStart = (IsCompressWeekend () && CBCGPPlannerManagerCtrl::GetFirstDayOfWeek () == 0) ? 1 : CBCGPPlannerManagerCtrl::GetFirstDayOfWeek (); if (m_ViewRects.GetSize () != nDays) { m_ViewRects.SetSize (nDays); } int iRow = 0; for (iRow = 0; iRow < nRows; iRow++) { CRect rect (m_rectApps); rect.right = rect.left + dxColumn; rect.top += iRow * (dxRow + 1); rect.bottom = iRow == (nRows - 1) ? rect.bottom : rect.top + dxRow; int nTop = rect.top; int nBottom = rect.bottom; int nColumn = 0; for (int iDay = 0; iDay < 7; iDay++) { int nWeekDay = nDayStart + iDay - 7; if (m_bCompressWeekend) { if (nWeekDay == -1) { rect.bottom = rect.top + dxRow / 2; } else if (nWeekDay == 0) { rect.top = rect.bottom + 1; rect.bottom = nBottom; } else { rect.top = nTop; } } m_ViewRects[iRow * 7 + iDay] = rect; if ((m_bCompressWeekend && nWeekDay != -1) || !m_bCompressWeekend) { rect.OffsetRect (dxColumn + 1, 0); nColumn++; if ((m_bCompressWeekend && nColumn == 5) || (!m_bCompressWeekend && nColumn == 6)) { rect.right = m_rectApps.right; } } } } if (m_nWeekBarWidth > 0) { int nIndex = 0; if (IsCompressWeekend () && m_ViewRects[0].top != m_ViewRects[1].top) { nIndex = 2; } m_WeekRects.SetSize (nRows); for (iRow = 0; iRow < nRows; iRow++) { CRect rect (m_ViewRects[nIndex]); rect.right = m_rectApps.left; rect.left = rect.right - m_nRowHeight; rect.top += m_nRowHeight; rect.InflateRect (0, 1); m_WeekRects[iRow] = rect; nIndex += 7; } } }